跳过正文
  1. Posts/

如何在 Jenkins 多分支流水线中实现 [skip ci]

·420 字·1 分钟· ·
沈显鹏
作者
沈显鹏
DevOps & Build 工程师 | Python 爱好者 | 开源贡献者
目录

在 Jenkins 多分支流水线中实现 [skip ci][ci skip] 时,现有插件似乎已不可用。

建议:如果可能,尽量不要依赖 Jenkins 插件。

于是,我决定自己实现一个 [skip ci] 功能。


在 Jenkins Shared Library 中创建函数
#

如果你和我一样使用 Jenkins Shared Library,可以在 src/org/cicd/utils.groovy 中创建一个 SkipCI 函数,这样其他任务也可以复用。

// src/org/cicd/utils.groovy
def SkipCI(number = "all"){
  def statusCodeList = []

  String[] keyWords = ['ci skip', 'skip ci'] // 可根据需要添加更多关键词
  keyWords.each { keyWord ->
    def statusCode = null
    if (number == "all") {
      statusCode = sh script: "git log --oneline --all | grep \'${keyWord}\'", returnStatus: true
    } else {
      statusCode = sh script: "git log --oneline -n ${number} | grep \'${keyWord}\'", returnStatus: true
    }
    statusCodeList.add(statusCode)
  }

  return statusCodeList.contains(0)
}

在其他任务中调用
#

// 以下为示例代码,并非完整可运行的版本
import org.cicd.utils

def call(){

  pipeline {
    agent {
      node {
        label 'linux'
      }
    }

    parameters {
      booleanParam defaultValue: true, name: 'Build', summary: '取消勾选以跳过构建。'
    }

    def utils = new org.cicd.utils()

    stage("Checkout") {
      checkout scm

      // 仅检查最新一次提交信息
      SkipCI = utils.SkipCI('1')
    }

    stage("Build"){
      when {
        beforeAgent true
        expression { return params.Build && !SkipCI }
      }

      steps {
        script {
          sh "make build"
        }
      }
    }
  }
}

总结
#

通过这种方式,你可以在不依赖插件的情况下,在 Jenkins 多分支流水线中灵活地实现 [skip ci] 功能。 如果有任何问题或建议,欢迎留言交流。


转载本文请注明作者与出处,禁止商业用途。欢迎关注公众号「DevOps攻城狮」。

相关文章

Jenkins Linux Agent 配置

·353 字·1 分钟
本文提供了 Jenkins Linux Agent 的逐步配置指南,包括 Java 运行时的准备、节点创建以及常见问题的排查方法。