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

如何用声明式Jenkins Pipeline按提交信息标签跳过指定阶段?

用声明式Jenkins Pipeline实现提交标签触发阶段跳过的需求

当然可以用声明式Pipeline搞定这个需求!之前用changelog指令达不到预期,是因为它的匹配能力有限,没法处理连字符和下划线等价的场景,不过我们可以用when块里的expression结合Groovy代码来实现更灵活的逻辑。

核心思路

  • 获取提交信息:通过Jenkins内置的currentBuild.changeSets获取本次构建的所有提交变更
  • 统一字符匹配规则:把提交消息里的连字符-替换成下划线_,这样#no-unittest和#no_unittest就可以用同一个规则匹配
  • 区分大小写检查:直接检查处理后的消息是否包含目标标签(比如#no_unittest),确保只有完全匹配大小写的标签才会触发跳过
  • 多提交场景覆盖:遍历所有提交,只要其中一个提交包含目标标签,就跳过对应阶段

完整的声明式Pipeline代码示例

agent any
    
    // 定义辅助函数复用标签检查逻辑
    def shouldSkipStage(String targetTag) {
        // 遍历所有变更集里的提交
        for (changeSet in currentBuild.changeSets) {
            for (entry in changeSet.items) {
                // 将提交消息中的-替换为_,统一匹配规则
                def processedMsg = entry.msg.replace('-', '_')
                // 检查是否包含目标标签(区分大小写)
                if (processedMsg.contains(targetTag)) {
                    return true
                }
            }
        }
        return false
    }

    stages {
        stage('Build') {
            when {
                // 提交信息不含#no_build/#no-build时才执行Build阶段
                expression { !shouldSkipStage('#no_build') }
            }
            steps {
                sh 'npm build'
            }
        }
        stage('Unittest') {
            when {
                branch 'master'
                // 同时满足:在master分支,且提交信息不含#no_unittest/#no-unittest
                expression { !shouldSkipStage('#no_unittest') }
            }
            steps {
                sh 'python unittest.py'
            }
        }
    }
}

关键细节说明

  • 辅助函数复用:shouldSkipStage函数可以避免重复写遍历和匹配逻辑,后续要加其他跳过标签(比如#no_deploy)直接调用这个函数就行
  • 字符等价处理:通过replace('-', '_')把所有连字符转成下划线,不管提交里写的是-还是_,都能被同一个标签规则匹配
  • 严格大小写区分:我们没有做任何大小写转换,所以只有完全匹配的标签(比如#no_unittest而不是#No_Unittest或#NO_UNITTEST)才会触发跳过,完全符合你的要求
  • 多提交兼容:如果一次推送包含多个提交,只要其中任何一个提交带有目标标签,就会跳过对应阶段,覆盖了实际开发中的常见场景

为什么不用changelog指令?

changelog指令的匹配是基于简单字符串或正则,但它无法在匹配前对文本做预处理(比如替换字符),所以没法优雅地处理-和_等价的情况。用expression结合Groovy代码就灵活多了,能实现各种自定义逻辑。

内容的提问来源于stack exchange,提问作者chocho.boss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:25:16