如何在Pull Request合并时触发Jenkins任务并保留Cron触发器?
监听PR合并触发Jenkins任务并保留Cron触发器(无UI权限方案)
一、通过Jenkinsfile配置双触发器(PR合并+定时Cron)
因为没有Jenkins UI操作权限,所有触发器逻辑都可以通过代码化的Jenkinsfile实现,配合代码仓库的Webhook完成事件监听:
1. 配置代码仓库Webhook(需仓库管理员协助)
让代码仓库(如GitHub/GitLab)的管理员添加Webhook,触发规则选择PR合并事件:
- GitHub:选择"Pull Request"事件,勾选"Closed"状态(合并会触发closed且merged的事件)
- GitLab:选择"Merge Request"事件,勾选"Merged"状态
Webhook的目标地址填写Jenkins的对应端点: - GitHub:
http://<你的Jenkins地址>/github-webhook/ - GitLab:
http://<你的Jenkins地址>/project/<流水线名称>/
2. 在Jenkinsfile中编写触发器与事件判断逻辑
在流水线代码中,同时配置Cron定时触发器和Webhook触发,并且精准判断是否为PR合并事件:
pipeline { agent any triggers { // 保留Cron定时触发器,示例为每天凌晨2点执行 cron('0 2 * * *') // 启用GitHub Webhook触发(对应GitHub的Webhook配置) githubPush() // 如果是GitLab,替换为gitlabPush()(需安装GitLab插件) // gitlabPush() } stages { stage('Check Trigger Source') { steps { script { // 判断是否为PR合并事件(以GitHub为例) def isPrMerged = false if (env.GITHUB_EVENT_NAME == 'pull_request' && env.GITHUB_PR_STATE == 'closed' && env.GITHUB_PR_MERGED == 'true') { isPrMerged = true } // GitLab的判断逻辑:env.GITLAB_EVENT_NAME == 'merge_request' && env.GITLAB_MERGE_REQUEST_STATE == 'merged' // 如果是定时触发或者PR合并触发,才执行后续步骤 if (currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause') || isPrMerged) { echo '触发源合法,开始执行流水线任务' } else { echo '非目标触发源,终止流水线' error('终止:非定时或PR合并触发') } } } } // 后续业务阶段 stage('Build') { steps { echo '执行构建任务' // sh 'mvn clean package' } } } }
3. 关键说明
- 环境变量:不同代码仓库的Webhook会传递不同的环境变量,比如GitHub的
GITHUB_EVENT_NAME、GITHUB_PR_MERGED,GitLab的GITLAB_EVENT_NAME、GITLAB_MERGE_REQUEST_STATE,可以通过echo sh(script: 'printenv', returnStdout: true)查看所有可用变量。 - 插件依赖:确保Jenkins已安装对应仓库的插件(GitHub Integration Plugin/GitLab Plugin),如果没有的话需要联系Jenkins管理员安装。
二、替代方案:利用分支Push事件间接触发
如果无法配置PR合并专属Webhook,可以监听目标分支(如main/master)的Push事件,因为PR合并后会向目标分支推送合并提交:
- 在Jenkinsfile的
triggers中保留cron,同时添加pollSCM(定时扫描分支变更)或者直接用Webhook监听目标分支的Push:
triggers { cron('0 2 * * *') // 定时扫描main分支变更,每5分钟一次 pollSCM('H/5 * * * *') }
这种方式的缺点是无法区分普通Push和PR合并的Push,但如果你的目标分支只有PR合并才会有Push,也可以满足需求。
内容的提问来源于stack exchange,提问作者Miljenko Bambino
相关产品推荐
相关产品推荐

