How to implement [skip ci] for Jenkins multi-branch pipeline

When I want to implement [skip ci] or [ci skip] for Jenkins multi-branch pipeline, the existing plugin seems broken.

My advice: try not to use the Jenkins plugin if possible.

Good, it’s time to implement [skip ci] myself.

If you like me used Jenkins shared library, you can create a function like SkipCI from src/org/cicd/utils.groovy, then other jobs can reused this function.

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

String[] keyWords = ['ci skip', 'skip ci'] // add more keywords if need.
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)
}

if (statusCodeList.contains(0)) {
return true
} else {
return false
}
}

Then I can call this function from other jobs.

// The following is not the complete code, it is just sample code and may not be run successfully.

import org.cicd.utils

def call(){

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

parameters {
booleanParam defaultValue: true, name: 'Build', description: 'Uncheck to skip build.'
}

def utils = new org.cicd.utils()

stage("Checkout") {
checkout scm

// just check the latest commit message.
SkipCI = utils.SkipCI('1')
}

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

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

Please let me know if any questions or suggestions.


转载本站文章请注明作者和出处,请勿用于任何商业用途。欢迎关注公众号「DevOps攻城狮」