如何在Jenkinsfile中定义一个全局的时间戳变量
文章发布较早,内容可能过时,阅读注意甄别。
很多时候,在构建的过程中,我们会取系统当前时间戳作为一个参照,融入到构建过程中,在原来自由风格中,都是基于 Linux 系统级别的 date
命令进行的定义,现在来到流水线里边,突然发现想要定义一个全局的时间戳变量,似乎并不容易,尽管知道流水线脚本就是 groovy 语言,然而因为不会开发,一时间也不知道从何下手,原来用的如下方式进行获取的时间戳:
pipeline{
agent any
stages{
stage('timestamp') {
steps {
script {
try {
echo '========================'
# 如果想要定义并获取时间戳变量,最好写到这里,实测写到environment是违规的语法
sh "version=`date +%Y%m%d%H%M%S`"
sh "printenv"
echo '========================'
} catch (err) {
echo '========================'
}
}
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
后来的使用中,深深觉得这种定义十分不方便,因此不死心的再到网上各种搜罗,看了不少的案例,似乎也都没有找到让自己满意的结果,最后在一个示例当中找到了,并做了一下简单调整,从而符合自己的需求。
def createVersion() {
// 定义一个版本号作为当次构建的版本,输出结果 20191210175842_69
return new Date().format('yyyyMMddHHmmss') + "_${env.BUILD_ID}"
}
pipeline {
agent any
// 可在 environment 引入上边定义的函数,以便于全局调用
environment {
_version = createVersion()
}
stages {
stage ("test") {
steps {
echo ${_version}
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
这样就实现了自己想要的全局时间戳变量了。
上次更新: 2024/07/04, 22:40:37