You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置每日Jenkins任务,需依赖其他任务当日成功运行

配置Jenkins每日任务:仅当Builder当日成功运行时触发

这个需求我之前帮团队处理过类似的,结合你的场景(Builder每15分钟扫变更构建,测试任务需每日执行但依赖Builder当日成功),给你几个实用的方案,你可以根据自己的Jenkins环境选择:

方案一:用Run Condition插件实现可视化配置

这是最直观的方式,不需要写脚本,适合自由风格任务:

  1. 安装必要插件:先在Jenkins插件管理里安装Run Condition Plugin和Build History Condition Plugin(后者是前者的依赖,用来检查构建历史)
  2. 设置定时触发:给测试任务添加「Build periodically」触发器,填入定时表达式,推荐用H 22 * * *——H是Jenkins的哈希时间,避免所有任务集中在同一分钟触发,分散服务器负载(你可以把22改成团队合适的时间)
  3. 添加前置判断条件:
    • 在任务的「Build Environment」或「Build Steps」前添加「Run Condition」步骤(具体位置取决于插件版本)
    • 选择「Logical Conditions」下的「And」(如果需要叠加其他条件),然后嵌套选择「Build History Condition」
    • 在Build History配置里:
      • 选择目标任务:你的Builder任务
      • 状态选择「Success」
      • 「Number of builds to check」填96(因为每15分钟一次,一天共96次构建,确保覆盖当日所有可能的运行)
      • 勾选「Only check builds from today」(插件会自动过滤当日的构建,避免误判之前的成功记录)
  4. 条件不满足时的处理:如果Builder当日没有成功构建,测试任务会自动跳过,你可以在条件里设置标记任务为「ABORTED」(终止)而不是失败,避免干扰告警

方案二:用Groovy脚本实现定制化判断

如果需要更灵活的逻辑(比如Builder有分支/参数需要过滤),用Groovy脚本是更好的选择:

自由风格任务配置:

  1. 同样设置定时触发H 22 * * *
  2. 添加「Execute system Groovy script」步骤,填入以下脚本:
// 获取Builder任务实例
def builderJob = Jenkins.instance.getItemByFullName("Builder")
// 定义今日起始时间(清空时分秒)
def today = new Date().clearTime()
// 判断是否有今日成功的构建
def hasSuccessfulBuildToday = builderJob.builds.any { build ->
    // 如果Builder有参数/分支,这里可以加判断,比如build.parameters.find { it.name == 'BRANCH' }.value == 'main'
    build.result == hudson.model.Result.SUCCESS && build.time >= today
}

// 如果没有符合条件的构建,终止任务
if (!hasSuccessfulBuildToday) {
    println "⚠️ Builder任务今日未成功运行,跳过本次测试任务"
    currentBuild.result = hudson.model.Result.ABORTED
    return
}
  1. 后续的测试步骤(比如执行测试脚本)会在脚本判断通过后才执行

Pipeline任务(Jenkinsfile)配置:

如果你的测试任务是流水线,直接把判断逻辑写在Jenkinsfile里更简洁:

pipeline {
    agent any
    // 每日22点左右触发
    triggers {
        cron('H 22 * * *')
    }
    stages {
        stage('检查Builder当日状态') {
            steps {
                script {
                    def builderJob = Jenkins.instance.getItemByFullName("Builder")
                    def today = new Date().clearTime()
                    def hasSuccess = builderJob.builds.any { 
                        it.result == Result.SUCCESS && it.time >= today 
                    }
                    if (!hasSuccess) {
                        error("❌ Builder今日无成功构建,终止测试任务")
                    }
                }
            }
        }
        stage('执行测试套件') {
            steps {
                sh './run-test-suite.sh' // 替换成你的测试命令
            }
        }
    }
}

注意事项

  • 时区问题:确保Jenkins的系统时区和团队工作时区一致,避免跨日期的判断错误(可以在Jenkins全局配置里设置时区)
  • 权限配置:如果Groovy脚本提示权限不足,需要在Jenkins「全局安全配置」里允许脚本访问Jenkins实例(或者用更安全的REST API调用,但需要自行处理认证)
  • 分支/参数过滤:如果Builder任务是多分支或带参数的,记得在判断逻辑里添加对应的过滤条件,确保检查的是正确分支/参数的构建

内容的提问来源于stack exchange,提问作者RichS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:59:23