小编典典

如何显示在Jenkins中运行构建所花费的时间?

jenkins

我正在使用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/ ")

除了上述信息之外,我还想包括构建运行到该消息的时间,该消息通知构建结束。

是否可以在不添加任何外部插件的情况下做到这一点?如果有一个环境变量可以保存此信息,那将是完美的,但我找不到这样的变量。


阅读 658

收藏
2020-07-25

共1个答案

小编典典

由于此 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

更新

由于您不想使用任何外部插件(这样做有些棘手),因此可以使用jenkins-pipeline中的follow脚本将开始时间保存在文件中:

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}"
2020-07-25