Jenkins如何在Git PR信息包含指定内容时触发对应stage?
Jenkins指定Stage条件触发实现方案
1. 前置配置要求
首先确认Jenkins已安装对应依赖:
- 基础Pipeline、Git插件
- 对应代码托管平台的集成插件(GitHub/GitLab/Gitee等,用于获取PR元数据)
- 配置Webhook触发器,确保代码提交、PR创建/更新事件均可触发流水线运行
2. 核心实现逻辑
通过声明式流水线的when条件组合判断三个触发规则即可:
- 当前触发事件为PR事件
- PR源分支为feature前缀分支、目标分支为master
- PR描述/标题包含指定字符串
Please build full pipeline
声明式流水线示例代码
pipeline { agent any stages { // 基础构建stage,所有场景都执行 stage('基础流水线构建') { steps { echo '执行常规构建、单测、代码扫描等逻辑' // 此处添加你的常规构建逻辑 } } // 特定触发stage,仅符合条件时运行 stage('触发其他Job的特定Stage') { when { allOf { // 通用变量,判断当前为变更请求(PR)事件,主流代码托管平台插件均支持 expression { env.CHANGE_ID != null } // 判断PR目标分支为master expression { env.CHANGE_TARGET == 'master' } // 判断PR源分支为feature开头的分支,可根据你的分支命名规则调整匹配规则 expression { env.CHANGE_BRANCH.startsWith('feature/') } // 判断PR描述包含指定字符串,需要判断标题可替换为CHANGE_TITLE变量 expression { env.CHANGE_DESCRIPTION?.contains('Please build full pipeline') } } } steps { echo '符合触发条件,执行对应Job触发逻辑' // 此处添加触发其他Job的逻辑,示例:build job: '目标Job名称', wait: false } } } }
不同平台变量适配说明
如果你使用的平台插件没有适配通用CHANGE_*变量,可以替换为平台特有的环境变量:
- GitHub平台:源分支
GITHUB_HEAD_REF、目标分支GITHUB_BASE_REF、PR描述GITHUB_PR_BODY - GitLab平台:源分支
CI_MERGE_REQUEST_SOURCE_BRANCH_NAME、目标分支CI_MERGE_REQUEST_TARGET_BRANCH_NAME、PR描述CI_MERGE_REQUEST_DESCRIPTION
3. 功能验证步骤
可以按以下场景逐一验证规则生效性:
- 直接向feature分支提交代码:仅运行基础构建stage,特定stage跳过
- 从feature分支向非master分支提交PR:无论是否携带指定字符串,特定stage均跳过
- 从feature向master提交PR,描述不含指定字符串:特定stage跳过
- 修改上述PR描述添加
Please build full pipeline并触发流水线:特定stage正常运行
内容的提问来源于stack exchange,提问作者user630702
相关产品推荐
相关产品推荐

