背景


现在一般都会使用Jenkins的Pipeline进行构建,那么不可避免要使用参数化构建,在使用参数化构建时,用户的输入都是不可靠的,自然填入的string参数可能会携带空格从而导致构建失败,那么应该如何处理这个问题?

探索


Jenkinsfile如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pipeline {
agent {
label 'k8s'
}

parameters {
string(name: 'Branch', defaultValue: '', description: '请指定需要构建的分支!')
}

stages {
stage('Source') {
steps {
echo "${params.Branch}"
}
}
}
}

官方文档里面,其实没有提及这一点,但是在Jenkins的配置界面中我们可以看到有如下的选项:

trim1.png

trim很好理解,就是去除参数的头尾空格,当然,我们可以打勾,来启用这个功能,但是这不是定义在pipeline中的,这样人为打勾失去了Jenkinsfile的意义,问题在于如何在Jenkinsfile中开启这个属性?

How to trim parameters in jenkins pipeline? 这篇提问中,有一个回答者提到如下定义即可:

1
parameters { string(defaultValue: "", description: '', name: 'tag or commit', trim: true) }

看来关键在于加入trim: true这个属性,有趣的是,下面也有评论提到了:

The “trim” is not in the jenkins doc jenkins.io/doc/book/pipeline/syntax/#parameters You may find from the codes?

在Jenkins的文档中并没有提及到这个trim属性,你是从代码中找到的吗?

可惜没有人回答,经过一番查找,我想到了使用Jenkins自带的语法生成器来看看能否生成去头尾空格的参数化构建片段,如下:

trim4.png

可见Jenkins的语法生成器还是挺有作用的,官方文档找不到的可以在语法生成器中生成对应的片段看看属性配置。

实例


到这一步,我们可以开始试验了,只需要稍作改动,加入trim: true

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pipeline {
agent {
label 'k8s'
}

parameters {
string(name: 'Branch', defaultValue: '', description: '请指定需要构建的分支!', trim: true)
}

stages {
stage('Source') {
steps {
echo "${params.Branch}"
}
}
}
}

测试结果如下:

trim2.png

trim3.png

参数化构建头尾去空格成功。

要先触发一次构建,后续构建才会生效。