如何让Jenkins仅在提交信息含[ci:deploy]时执行Deploy阶段
如何让Jenkins仅在提交信息包含[ci:deploy]时执行Deploy阶段?
嘿,这个需求其实很容易实现,我们可以利用Jenkins Pipeline的when条件判断,结合Git提交信息来控制Deploy阶段的执行时机。具体做法如下:
核心思路
通过Git命令提取当前触发流水线的提交信息,然后用when块中的表达式判断该信息是否包含[ci:deploy],只有满足条件时才执行Deploy阶段。
修改后的完整流水线代码
pipeline { agent any stages { stage('Verify Branch') { steps { echo "$GIT_BRANCH" } } stage('Build') { steps { echo "build now" } } stage('Test') { steps { echo "test now" // sh '''#!/bin/bash // echo "hello world" // exit 1 // ''' } } stage('Deploy') { // 新增when条件判断,控制阶段执行时机 when { expression { // 获取当前提交的完整信息并去除首尾空格 def commitMessage = sh( script: 'git log --format=%B -n 1 $GIT_COMMIT', returnStdout: true ).trim() // 判断提交信息是否包含目标标识 return commitMessage.contains('[ci:deploy]') } } steps { echo "deploy now" } } } }
代码细节解释
when块:这是Jenkins Pipeline控制阶段执行的核心语法,只有当其中的表达式返回true时,该阶段才会启动运行。- 提取提交信息:用
git log --format=%B -n 1 $GIT_COMMIT命令获取当前触发流水线的提交的完整内容(%B表示输出完整提交信息,-n 1只取最近一次提交),returnStdout: true让我们能捕获命令的输出结果供后续判断使用。 - 标识判断逻辑:通过
contains('[ci:deploy]')检查提交信息是否包含指定标识,满足条件则返回true,Deploy阶段正常执行;反之该阶段会被标记为"skipped"(跳过),不会执行任何步骤。
测试验证方式
- 当提交信息为
[ci:deploy] deploy the app这类包含目标标识的内容时,流水线运行到Deploy阶段会正常执行echo "deploy now"。 - 如果提交信息里没有
[ci:deploy],Deploy阶段会直接被跳过,不会执行任何部署相关操作。
内容的提问来源于stack exchange,提问作者Jon Sud
相关产品推荐
相关产品推荐

