如何根据$git_project变量条件执行Jenkins Pipeline不同阶段
Jenkins Pipeline按触发仓库选择性执行阶段实现方法
核心用流水线原生的条件判断能力即可,不需要额外安装插件,分两种常用流水线语法的实现方式:
- 首先确认
git_project变量已经正常注入流水线上下文:不管是webhook触发器传参、还是多仓库触发自动注入的变量,先在流水线最开始加打印步骤echo "当前触发仓库变量值:${git_project}"确认值能正常取到,避免后续判断因为变量为空/值不符合预期失效。
声明式流水线(最常用)写法
用阶段自带的when指令做条件拦截,只有满足匹配规则的阶段会被执行,不满足的阶段会直接跳过,示例代码:
pipeline { agent any // 可选:如果需要支持手动触发选择构建的仓库类型,可以加参数定义,自动触发时参数会被webhook传入的同名字段覆盖 parameters { choice(name: 'git_project', choices: ['backend', 'frontend'], description: '触发构建的代码仓库标识') } stages { stage('拉取对应仓库代码') { steps { echo "当前触发构建的仓库:${git_project}" // 此处写对应仓库的代码拉取逻辑即可 } } stage('后端构建&部署') { // 条件规则:仅当git_project值为backend时执行当前阶段 when { environment name: 'git_project', value: 'backend' } steps { echo '执行后端构建全流程:依赖安装、编译、单元测试、镜像打包、服务部署' // 实际使用替换成你的后端构建命令,比如 sh 'mvn clean package -DskipTests' } } stage('前端构建&部署') { // 条件规则:仅当git_project值为frontend时执行当前阶段 when { environment name: 'git_project', value: 'frontend' } steps { echo '执行前端构建全流程:依赖安装、资源打包、静态资源上传、站点部署' // 实际使用替换成你的前端构建命令,比如 sh 'pnpm install && pnpm build' } } stage('构建收尾') { steps { echo '执行前后端构建都需要走的公共步骤:发送构建通知、清理工作空间' } } } }
如果你的git_project存的是完整仓库地址(比如git@code.xxx.com:project/backend-repo.git),不是固定的短标识,可以把when规则换成表达式匹配,支持更灵活的判断逻辑:
when { // 只要变量值里包含backend字符串就判定为后端仓库触发 expression { return git_project.trim().contains('backend') } }
注意给值加
trim()是为了去掉传参时可能带的多余空格、换行符,避免因为格式问题判断失效。
脚本式流水线写法
脚本式语法直接用原生Groovy的if/else做分支判断即可,逻辑更灵活:
node { def targetProject = env.git_project.trim() stage('拉取代码') { echo "当前触发仓库:${targetProject}" } if (targetProject == 'backend') { stage('后端构建部署') { echo '执行后端构建流程' } } else if (targetProject == 'frontend') { stage('前端构建部署') { echo '执行前端构建流程' } } stage('公共收尾') { echo '执行通知、清理等公共步骤' } }
内容的提问来源于stack exchange,提问作者HavyZail
相关产品推荐
相关产品推荐

