You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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"
            }
        }
    }
}

代码细节解释

  1. when块:这是Jenkins Pipeline控制阶段执行的核心语法,只有当其中的表达式返回true时,该阶段才会启动运行。
  2. 提取提交信息:用git log --format=%B -n 1 $GIT_COMMIT命令获取当前触发流水线的提交的完整内容(%B表示输出完整提交信息,-n 1只取最近一次提交),returnStdout: true让我们能捕获命令的输出结果供后续判断使用。
  3. 标识判断逻辑:通过contains('[ci:deploy]')检查提交信息是否包含指定标识,满足条件则返回true,Deploy阶段正常执行;反之该阶段会被标记为"skipped"(跳过),不会执行任何步骤。

测试验证方式

  • 当提交信息为[ci:deploy] deploy the app这类包含目标标识的内容时,流水线运行到Deploy阶段会正常执行echo "deploy now"。
  • 如果提交信息里没有[ci:deploy],Deploy阶段会直接被跳过,不会执行任何部署相关操作。

内容的提问来源于stack exchange,提问作者Jon Sud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 21:27:36