共计 3016 个字符,预计需要花费 8 分钟才能阅读完成。
jenkins构建任务中显示每个步骤的时间可以使用timestamp插件,参考文章:Jenkins关于显示时间
timestamp插件只是在console中打印每个步骤的时间,如何在stage中使用该时间变量呢?此时就可以使用另外一个插件:Build Timestamp
Build Timestamp
该插件默认提供一个timestamps到env中,此变量是:BUILD_TIMESTAMP
,该变量代表任务build开始时间,在pipeline中可以这样使用
pipeline {
agent any
stages {
stage('Hello') {
steps {
timestamps {
echo 'Hello World'
}
}
}
stage('Print env') {
steps {
echo 'Hello World'
}
}
stage('Print Build Timestamp') {
steps {
echo "build start time: ${BUILD_TIMESTAMP}"
}
}
}
}
对于console输出如下
Started by user cicd-admin
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/hello-world
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Hello)
[Pipeline] timestamps
[Pipeline] {
[Pipeline] echo
19:48:09 Hello World
[Pipeline] }
[Pipeline] // timestamps
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Print env)
[Pipeline] echo
Hello World
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Print Build Timestamp)
[Pipeline] echo
build start time: 2019-06-23 19:48:08 CST
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
相应的时间变量格式也可以修改,在系统管理》configure system中:
Pattern Syntax
Symbol Meaning Presentation Example
G era designator Text AD
y year Number 2009
M month in year Text & Number July & 07
d day in month Number 10
h hour in am/pm (1-12) Number 12
H hour in day (0-23) Number 0
m minute in hour Number 30
s second in minute Number 55
S millisecond Number 978
E day in week Text Tuesday
D day in year Number 189
F day of week in month Number 2 (2nd Wed in July)
w week in year Number 27
W week in month Number 2
a am/pm marker Text PM
k hour in day (1-24) Number 24
K hour in am/pm (0-11) Number 0
z General time zone Text Pacific Standard Time; PST; GMT-08:00
Z RFC 822 time zone Text -0800
' escape for text Delimiter (none)
' single quote Literal ' Samples
Pattern Output
dd.MM.yy 30.06.09
yyyy.MM.dd G 'at' hh:mm:ss z 2009.06.30 AD at 08:29:36 PDT
EEE, MMM d, ''yy Tue, Jun 30, '09
h:mm a 8:29 PM
H:mm 8:29
H:mm:ss:SSS 8:28:36:249
K:mm a,z 8:29 AM,PDT
yyyy.MMMMM.dd GGG hh:mm aaa 2009.June.30 AD 08:29 AM
同时可以新增时间变量,比如前24小时的时间:
stage('Print Build Timestamp') {
steps {
echo "build start time: ${BUILD_TIMESTAMP}"
echo "build start time: ${BUILD_TIMESTAMP_YESTERDAY}"
}
}
console输出
[Pipeline] { (Print Build Timestamp)
[Pipeline] echo
build start time: 2019-06-23 20:01:04 CST
[Pipeline] echo
build start time: 2019-06-22 20:01:04 CST
[Pipeline] }
[Pipeline] // stage
最后提供下不用插件的方式获取时间变量
1.使用shell
environment {
SHELL_BUILD_TIMESTAMP = """${sh(returnStdout: true,script: 'date +%Y%m%d%H%M%S').trim()}"""
}
2.使用groovy内部对象构造一个方法
def createTimestamp() {
return new Date().format('yyyyMMddHHmmss')
}
pipeline {
agent any
// environment中引入上边定义的函数,以便于全局调用
environment {
MY_BUILD_TIMESTAMP = createTimestamp()
}
stages {
stage ("test") {
steps {
echo "${MY_BUILD_TIMESTAMP}"
}
}
}
}
也不一定要在全局变量中才用,只需要调用该方法就可以创建一个时间变量
def createTimestamp() {
return new Date().format('yyyyMMddHHmmss')
}
pipeline {
agent any
// environment中引入上边定义的函数,则该任务全局可用
environment {
MY_BUILD_TIMESTAMP = createTimestamp()
}
stages {
stage ("test") {
steps {
echo "${MY_BUILD_TIMESTAMP}"
sleep time: 20, unit: 'SECONDS'
script {
SCRIPT_TIMESTAMP2 = createTimestamp()
echo "${SCRIPT_TIMESTAMP2}"
}
}
}
}
}
相应的console输出
[Pipeline] stage
[Pipeline] { (test)
[Pipeline] echo
20190623204937
[Pipeline] sleep
Sleeping for 20 sec
[Pipeline] script
[Pipeline] {
[Pipeline] echo
20190623204957
[Pipeline] }
[Pipeline] // script
正文完