jenkins pipeline 跳过特殊 commit 的方法

有时候一些 git commit 是由机器人提交的,或者类似于 maven release 插件提交的代码,我们不希望他触发 jenkins 构建。

方法1:使用 expression 判断 commit 信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

pipeline {
agent {
label "jks-web"
}
stages {
stage("git fetch") {
steps {
echo "git fetch"
}
}
stage("build") {
when {
expression {
!sh(script: "git log -1",returnStdout: true).contains("skip")
}
}
steps {
echo "build"
}
}
}
}

方法2: 使用 changelog 的正则表达式来配置 commit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

pipeline {
agent {
label "jks-web"
}
stages {
stage("git fetch") {
steps {
echo "git fetch"
}
}
stage("build") {
when {
not {
changelog '.*skip-ci.*'
}
}
steps {
echo "build"
}
}
}
}

方法3: 在 script 标签中判断,如果不满足条件,则终止本次构建

1
2
3
4
5
6
7
8
9
10
11
stage("check commit"){
steps {
script {
def commit_msg = sh(returnStdout: true, script: 'git log -n 1 --pretty=format:"%s"').trim()
if(commit_msg.contains("skip ci")) {
currentBuild.result = 'ABORTED'
error('stop auto commit')
}
}
}
}