How to display the time it took to run a build in Jenkins?

天涯浪子 提交于 2019-12-05 06:15:27

Since this jenkins-pipeline script is in Groovy you can simply use new Date() on it. Something like this "Current time ${new Date()}" on the message argument must work:

slackSend (channel: '#slack-test', color: 'warning', message: "Current time ${new Date()}")

This will produce the follow message in your channel:

Current time: Thu Oct 13 17:25:12 CEST 2016

If you want a specific date format you can use format(String format) method, for example "${new Date().format('dd/MM/yyyy')}":

slackSend (channel: '#slack-test', color: 'warning', message: "Current time ${new Date().format('dd/MM/yyyy')}")

This instead will produce the follow message:

Current time: 13/10/2016

UPDATE

Since you don't want to use any external plugins a possible way to do so (it's a little tricky) it's to save the start time in a file using the follow script in your jenkins-pipeline:

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}"

Then in an other jenkins-pipeline where your build finish, parse the date from the file and get the difference with the current time:

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}"

You can use ${currentBuild.durationString} to get build duration. I'm using it in my declarative pipeline scripts.

Note: If you're using HipChat plugin, you can use ${BUILD_DURATION} (previously ${DURATION}) variable in your hipchatSend command (it is propagated by the plugin with some other variables).

Example:

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>.'
  }
}

Here is some more info on Jenkins environment variables that can be used in job configuration.

You can use ${currentBuild.durationString} to get it formatted in a human-readable format (n minutes n seconds). However it will be prefixed with and counting which is kinda weird.

So I followed this ${currentBuild.durationString.replace(' and counting', '')}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!