获取当前构建的舞台视图时间

时间:2019-09-12 18:41:50

标签: jenkins-pipeline jenkins-plugins

是否可以通过编程方式获取舞台视图时间值? stage view times

我想在控制台内打印包括舞台标题在内的所有舞台的舞台时间。

类似的东西:

Build Code: 19s
Unit Tests: 7s
Integration Tests: 17s

看看插件代码,我可以看到它是如何通过格式化程序呈现的,但是我无法弄清楚如何通过Jenkinsfile访问这些值。

在源代码中,似乎正在使用毫秒级的时间。我可以轻松地将其转换为更好的人类可读时间。

/**
 * Calculate how long something took from start to end
 * @param start Start time in milliseconds
 * @param end   End Time in milliseconds
 * @return  Duration as String from start to end
 */
def calculateDuration(start, end) {
    long elapsedTime = end - start

    Long second = (elapsedTime / 1000).longValue() % 60;
    Long minute = (elapsedTime / (1000 * 60)).longValue() % 60;
    Long hour = (elapsedTime / (1000 * 60 * 60)).longValue() % 24;
    Long remainderMillis = elapsedTime % 1000

    return "${hour}h ${minute}m ${second}s ${remainderMillis}ms"
}

2 个答案:

答案 0 :(得分:1)

因此,这并不是您要找的超级简单的解决方案,但是我也不知道如何执行此操作,因此想尝试一下。

基本上,我是在OS级别上将简单的HTML写入文件,最后通过 Rich Text Publisher 插件进行发布。然后显示在构建页面上。

我不确定如何将持续时间正确格式化为hh:mm:ss

enter image description here

def logit(logMessage) {
    logFile.append(logMessage + "\n")
}

def calculateDuration(start, end) {
    long elapsedTime = end - start

    Long second = (elapsedTime / 1000).longValue() % 60;
    Long minute = (elapsedTime / (1000 * 60)).longValue() % 60;
    Long hour = (elapsedTime / (1000 * 60 * 60)).longValue() % 24;
    Long remainderMillis = elapsedTime % 1000

    return "${hour}h ${minute}m ${second}s ${remainderMillis}ms"
}

node () {
    stage('Create logfile') {
       sh "rm -f /tmp/log.html"
       logFile = new File("/tmp/log.html")
       logit("<html>")
       logit("  <body>")
    }
    stage('Time this stage') {
       start = System.currentTimeMillis()
       logit("Start time " + start + "<br>")
       sleep(3)
       end = System.currentTimeMillis()
       logit("End time " + end + "<br>")
       dur = calculateDuration(start, end)
       println "Duration: " + dur
       logit("Duration: " + dur + "<br>")
    }
    stage('Publish') {
       logit("  </body>")
       logit("</html>")
       rtp (nullAction: '1', stableText: '${FILE:/tmp/log.html}')
    }
}

答案 1 :(得分:0)

具有讽刺意味的是,多年后我发现了一个更好的解决方案,它可以满足我的需求,这就是分阶段的时间。

根据 Jenkins 作业的类型、Freeestyle 或 Multibranch,您可以查看公开的 Jenkins API 端点以获取信息。

自由式终点:env.BUILD_URL/api/json?pretty=true

多分支端点:env.BUILD_URL/wfapi/describe

这是一个 JSON 响应,因此可以使用 readJSON Jenkins DSL 轻松解析和存储。

您可以在下面看到自由式作业的示例响应。很抱歉停电,但不想公开公司目录结构。 enter image description here