如何配置每日Jenkins任务,需依赖其他任务当日成功运行
配置Jenkins每日任务:仅当Builder当日成功运行时触发
这个需求我之前帮团队处理过类似的,结合你的场景(Builder每15分钟扫变更构建,测试任务需每日执行但依赖Builder当日成功),给你几个实用的方案,你可以根据自己的Jenkins环境选择:
方案一:用Run Condition插件实现可视化配置
这是最直观的方式,不需要写脚本,适合自由风格任务:
- 安装必要插件:先在Jenkins插件管理里安装
Run Condition Plugin和Build History Condition Plugin(后者是前者的依赖,用来检查构建历史) - 设置定时触发:给测试任务添加「Build periodically」触发器,填入定时表达式,推荐用
H 22 * * *——H是Jenkins的哈希时间,避免所有任务集中在同一分钟触发,分散服务器负载(你可以把22改成团队合适的时间) - 添加前置判断条件:
- 在任务的「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」(插件会自动过滤当日的构建,避免误判之前的成功记录)
- 选择目标任务:你的
- 条件不满足时的处理:如果Builder当日没有成功构建,测试任务会自动跳过,你可以在条件里设置标记任务为「ABORTED」(终止)而不是失败,避免干扰告警
方案二:用Groovy脚本实现定制化判断
如果需要更灵活的逻辑(比如Builder有分支/参数需要过滤),用Groovy脚本是更好的选择:
自由风格任务配置:
- 同样设置定时触发
H 22 * * * - 添加「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 }
- 后续的测试步骤(比如执行测试脚本)会在脚本判断通过后才执行
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
相关产品推荐
相关产品推荐

