根据数据库中的时间值动态调度Jenkins Job

44次阅读
没有评论

问题描述

遇到了一个情况,他的数据库中有一个表格,其中包含了需要构建的计划时间。这些构建的计划时间可能会因每天而异。举个例子,

今天数据库中的记录是 09/01/2020 17:00 明天数据库中的记录可能是 10/01/2020 16:00

基于上面的表格,他希望今天在下午5:00和明天在下午4:00分别调度Jenkins Job。他想知道是否有可能在Jenkins中根据上述表格中的条目配置构建。

解决方案

请注意以下操作可能会因Jenkins版本差异而有所不同,以下解决方案基于常见做法。

要在Jenkins中动态地根据数据库中的时间值进行Job调度,需要采取一些措施。Jenkins本身并不太适合使用外部数据源来驱动动态的Job调度。这是因为Job的配置,包括调度,在静态地构建,要么通过Web界面手动创建,要么通过在作业执行时运行的Pipeline脚本以代码方式创建。即使Pipeline脚本以动态方式构建作业配置,配置本身也会在下一次作业执行之前被锁定。

最简单的方法是使用外部源来驱动构建调度。评论中提到的钩子(webhook)是理想的方式,但听起来对你来说并不可行。另一个想法是在数据库服务器上设置一个cron作业,每天运行一次,从数据库中获取构建时间,并为该时间调度构建。虽然这可能不是最佳解决方案,但它只是一个示例。

以下是一种可能的解决方案:

方案

  1. 创建一个新的Jenkins Pipeline项目。
  2. 在Pipeline脚本中,编写逻辑以从数据库中获取今天和明天的构建时间。
  3. 使用Jenkins内置的定时触发器(cron)来调度作业。

以下是一个简化的Pipeline脚本示例:

pipeline {
    agent any

    triggers {
        cron("${getBuildTime('today')}") // 调度今天的构建
        cron("${getBuildTime('tomorrow')}") // 调度明天的构建
    }

    stages {
        stage('Build') {
            steps {
                // 构建步骤
            }
        }
    }
}

def getBuildTime(day) {
    // 在这里编写从数据库获取构建时间的逻辑,返回一个cron表达式
}

在这个示例中,我们创建了一个Pipeline项目,并在触发器部分使用了Jenkins的定时触发器(cron)。在getBuildTime函数中,你需要编写从数据库获取构建时间的逻辑,并返回一个cron表达式,以便将其传递给定时触发器。

请注意,具体的getBuildTime函数的实现会因为数据库访问方式等因素而有所不同,你需要根据你的情况来编写适合的代码。

虽然这不是一个完美的解决方案,但它可以帮助你实现根据数据库中的时间值动态调度Jenkins Job。如果你能够访问钩子(webhook),那将是更好的方式,但如果不行,这是一个可行的替代方法。

正文完