Jenkins如何在job1/2/3全部成功后运行job4?Jenkinsfile中如何校验多任务状态?
Jenkins实现多前置任务全部成功后触发指定任务方案
针对你描述的job1/job2/job3全部构建成功后才执行job4的需求,以下是两种可落地的实现方式,核心可以满足三个前置任务独立、job4自主校验状态的要求:
方案1:job4主动校验前置任务状态(推荐)
该方案无需修改job1/job2/job3的任何配置,所有逻辑都封装在job4的Jenkinsfile中,完全符合任务独立的要求。核心通过Jenkins内置的任务API查询三个前置任务的构建状态,校验通过后再执行主程序逻辑。
以下是完整的Jenkinsfile示例:
pipeline { agent any environment { // 配置三个前置任务的完整名称,如有父文件夹需要填写全路径 PRE_JOB_NAMES = "job1,job2,job3" } stages { stage("前置任务状态校验") { steps { script { def jobList = PRE_JOB_NAMES.split(",").collect { it.trim() } boolean allJobSuccess = true jobList.each { jobName -> // 获取指定任务的实例对象 def targetJob = Jenkins.instance.getItemByFullName(jobName) if (!targetJob) { error("任务[${jobName}]不存在,请检查配置的任务名称是否正确") } // 获取该任务最近一次完成的构建记录 def lastCompletedBuild = targetJob.getLastCompletedBuild() if (!lastCompletedBuild) { allJobSuccess = false echo("任务[${jobName}]暂无完成的构建记录,校验不通过") return } // 判断构建结果是否为成功 if (lastCompletedBuild.getResult() != Result.SUCCESS) { allJobSuccess = false echo("任务[${jobName}]最近一次构建结果为${lastCompletedBuild.getResult()},校验不通过") } else { echo("任务[${jobName}]最近一次构建成功,构建号:${lastCompletedBuild.getNumber()},校验通过") // 如有需要可以在这里提取该构建对应的代码commit号、产物地址等信息,供后续主程序构建使用 } } if (!allJobSuccess) { error("存在前置任务构建未成功,终止本次主程序构建") } echo("所有前置任务均校验通过,开始执行主程序构建逻辑") } } } stage("主程序构建") { steps { // 此处编写你的主程序逻辑,可自主选择重新构建三个模块,或者直接拉取对应版本的模块代码执行后续操作 echo "开始执行主程序构建" } } } }
注意事项
- 首次运行该脚本会触发Jenkins的脚本安全校验,需要管理员进入「Manage Jenkins」->「In-process Script Approval」页面审批对应方法的调用权限
- 如果需要校验的是三个前置任务的指定版本构建结果,可将
getLastCompletedBuild()替换为getBuildByNumber(指定构建号)实现精准查询 - 如需自动定时校验,可给job4配置定时构建触发器,按所需频率自动校验状态,全部通过后自动执行主程序构建
方案2:自动链式触发
如果不需要job4主动轮询,希望三个前置任务都完成后自动触发job4,可以用该方案:
- 安装Jenkins的
Join Plugin插件 - 给job1/job2/job3分别配置后置构建动作:「Trigger/call builds on other projects」,触发项目填写job4
- 在job4的触发配置中开启「Trigger only if build is stable」,同时通过Join插件配置触发条件为job1、job2、job3全部构建成功后才启动
- 可配合方案1中的状态校验脚本,在job4启动后做二次校验,避免误触发
内容的提问来源于stack exchange,提问作者user630702
相关产品推荐
相关产品推荐

