我正在使用Jenkins管道配置Android应用程序构建过程。
在构建的开始和结束时,会向相关的Slack通道发送一条消息。
Jenkinsfile的相关部分如下:
slackSend (channel: '#slack-test', color: 'warning', message: "Finished: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' State: ${STATE}. Artifacts can be viewed here: ${env.BUILD_URL}artifact/Product/build/outputs/ ")
除了上述信息之外,我还想包括构建运行到该消息所花费的时间,该消息通知了构建的结束。
这可以不添加任何外部插件吗?如果有一个包含这些信息的环境变量,它将是完美的,但我找不到这样的变量。
答案 0 :(得分:5)
您可以使用${currentBuild.durationString}
来获取构建持续时间。我在我的声明性管道脚本中使用它。
注意:如果您使用的是HipChat plugin,则可以在${BUILD_DURATION}
命令中使用${DURATION}
(以前的hipchatSend
)变量(它由插件传播一些其他变量)。
示例:
post {
success {
hipchatSend color: 'GREEN', room: 'My room', failOnError: true, notify: false,
message: 'Build <a href=\'${BUILD_URL}\'>${JOB_DISPLAY_NAME} #${BUILD_NUMBER}</a> has been built. Took ${BUILD_DURATION}. See the <a href=\'${BUILD_URL}/console\'>output</a>.'
}
}
以下是可以在作业配置中使用的更多info on Jenkins environment variables。
答案 1 :(得分:2)
由于此 jenkins-pipeline 脚本位于 Groovy 中,因此您只需使用new Date()
即可。 "Current time ${new Date()}"
参数上的这个message
必须有效:
slackSend (channel: '#slack-test', color: 'warning', message: "Current time ${new Date()}")
这将在您的频道中生成以下消息:
Current time: Thu Oct 13 17:25:12 CEST 2016
如果您想要特定的日期格式,可以使用format(String format)
方法,例如"${new Date().format('dd/MM/yyyy')}"
:
slackSend (channel: '#slack-test', color: 'warning', message: "Current time ${new Date().format('dd/MM/yyyy')}")
这将产生以下消息:
Current time: 13/10/2016
<强>更新强>
由于您不想使用任何外部插件,因此可能会这样做(这有点棘手),您可以使用以下脚本将开始时间保存在文件中詹金斯流水线:
def f = new File("/tmp/buildStart.txt")
def start = new Date().format('dd/MM/yyyy HH:mm:ss')
f.text = start
slackSend color: 'red', message: "Build start at ${start}"
然后在构建完成的其他jenkins管道中,从文件中解析日期并获得与当前时间的差异:
def f = new File("/tmp/buildStart.txt")
def startDate = new Date().parse('dd/MM/yyyy HH:mm:ss',f.text)
def endDate = new Date()
def tookTime = groovy.time.TimeCategory.minus(endDate,startDate).toString()
slackSend color: 'red', message: "Total time: ${tookTime}"
答案 2 :(得分:0)
您可以使用${currentBuild.durationString}
将其格式化为易于理解的格式(n分钟n秒)。
但是,它的前缀为and counting
,有点奇怪。
所以我关注了this
${currentBuild.durationString.replace(' and counting', '')}
答案 3 :(得分:0)
要从字符串中删除“计数”部分,您可以执行以下操作:
atexit()
答案 4 :(得分:-1)
@Evan的答案对我来说非常适合查找/显示Jenkins工作的建立时间。
回显$ {currentBuild.durationString.replace('and counting','')}