如何强制Jenkins等待队列中的第二个任务在首个任务完成后执行?
Jenkins任务排队执行及关联邮件问题解决
强制任务排队执行的两种方法
要让新触发的任务自动进入等待队列,待前一个任务完成后再执行,可通过以下方式实现:
1. Pipeline代码中添加并发限制
在Pipeline的最外层加入options块,配置disableConcurrentBuilds()即可禁止并发构建,新任务会自动排队:
pipeline { agent any options { disableConcurrentBuilds() // 核心配置:禁止同一任务并发运行 } // 后续stage、post等配置保持不变 stages { stage('Set-Up') { script { ... } } stage('Jobs') { parallel { stage('job-1') { steps { ... } } stage('job-2') { steps { ... } } } } } post { always { // 生成Allure报告逻辑 ... emailext( body: '''${SCRIPT, template="allure-report.groovy"}''', subject: "Jenkins Job '${env.JOB_NAME}--${env.BUILD_NUMBER}' ${currentBuild.currentResult}", to: params.receiver, mimeType: 'text/html') } } }
2. 任务配置页面可视化设置
无需修改代码,直接在任务配置页操作:
- 进入目标任务的「配置」页面
- 找到「高级项目选项」(部分版本在「构建触发器」区域)
- 勾选「禁止并发构建」选项,保存后生效
附带解决邮件模板缺失错误
失败任务邮件提示Groovy Template file [allure-report.groovy] was not found,原因是构建失败时Allure报告未生成,或模板文件确实不存在。可按以下处理:
- 检查Jenkins服务器的
$JENKINS_HOME/email-templates目录,确认allure-report.groovy是否存在,缺失则补充该模板文件 - 修改
post块逻辑,区分构建状态发送不同邮件,避免失败时触发模板错误:
post { success { // 仅构建成功时发送带Allure报告的邮件 emailext( body: '''${SCRIPT, template="allure-report.groovy"}''', subject: "Jenkins Job '${env.JOB_NAME}--${env.BUILD_NUMBER}' 构建成功", to: params.receiver, mimeType: 'text/html') } failure { // 构建失败时发送简单通知 emailext( body: "任务构建失败,编号:${env.BUILD_NUMBER},日志地址:${env.BUILD_URL}", subject: "Jenkins Job '${env.JOB_NAME}--${env.BUILD_NUMBER}' 构建失败", to: params.receiver, mimeType: 'text/plain') } always { // 保留其他需要始终执行的逻辑(如生成报告) ... } }
内容的提问来源于stack exchange,提问作者user3595231
相关产品推荐
相关产品推荐

