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

前端 未结 5 1564
难免孤独
难免孤独 2021-01-12 03:14

I\'m configuring a process of Android application build by using Jenkins pipeline.

At the beginning and the end of the build, a message is sent to a relevant Slack c

相关标签:
5条回答
  • 2021-01-12 03:39

    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.

    0 讨论(0)
  • 2021-01-12 03:39

    To remove the 'and counting' part from the string you can do the following:

    "${currentBuild.durationString.minus(' and counting')}"

    0 讨论(0)
  • 2021-01-12 03:52

    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}"
    
    0 讨论(0)
  • 2021-01-12 04:00

    Above @Evan's answers works perfectly fine to me to find out/show the build time duration of the Jenkins job.

    echo ${currentBuild.durationString.replace(' and counting', '')}

    0 讨论(0)
  • 2021-01-12 04:01

    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', '')}

    0 讨论(0)
提交回复
热议问题