如何从Jenkins构建变量获取构建时间戳?

时间:2014-06-15 05:34:07

标签: jenkins jenkins-plugins

如何从Jenkins获取最新版本的构建时间戳? 我想在post build actions中的Email主题中插入此值。

10 个答案:

答案 0 :(得分:17)

构建时间戳插件将是在构建过程中获取TIMESTAMPS的最佳答案。

按照以下简单步骤启用"BUILD_TIMESTAMP"变量。

第1步:

Manage Jenkins -> Plugin Manager -> Installed...
Search for "Build Timestamp Plugin".
Install with or without Restart.

第2步:

Manage Jenkins -> Configure System.
Search for 'Build Timestamp' section, then Enable the CHECKBOX.
Select the TIMEZONE, TIME format you want to setup with..Save the Page.

<强> USAGE:

When Configuring the Build with ANT or MAVEN, 
Please declare a Global variable as, 
E.G.  btime=${BUILD_TIMESTAMP}
(use this in your Properties box in ANT or MAVEN Build Section)

use 'btime' in your Code to any String Variables etc..

enter image description here

enter image description here

答案 1 :(得分:15)

注意:这在Jenkins 1.597中已更改,有关迁移的详细信息,请参阅here

您应该能够通过导航到https://<your-jenkins>/env-vars.html来查看构建期间可用的所有全局环境变量。

https://<your-jenkins>/替换为您用于访问Jenkins网页的网址(例如,可能是http://localhost:8080/env-vars.html)。

其中一个环境变量是:

BUILD_ID
    The current build id, such as "2005-08-22_23-59-59" (YYYY-MM-DD_hh-mm-ss)

如果您使用jenkins可编辑电子邮件通知,则应该可以在电子邮件的主题行中使用${ENV, var="BUILD_ID"}

答案 2 :(得分:4)

尝试使用Build Timestamp Plugin并使用BUILD_TIMESTAMP变量。

答案 3 :(得分:1)

我知道它迟到了回答这个问题,但我最近在没有安装任何插件的情况下找到了更好的解决方案。我们可以创建格式化的版本号,然后可以使用创建的变量来显示构建日期/时间。 创建步骤:构建环境 - &gt;创建格式化版本号:

  • 环境变量名称: BUILD_DATE

  • 版本号格式字符串: $ {BUILD_DATE_FORMATTED}

就是这样。只需在电子邮件主题行中使用上面创建的变量 $ {ENV,var =&#34; BUILD_DATE&#34;} ,您将获得当前版本的日期/时间。

答案 4 :(得分:1)

从脚本(Unix脚本)生成环境变量:

echo "BUILD_DATE=$(date +%F-%T)"

答案 5 :(得分:1)

可以做到这一点的一种方法是在全局环境部分中使用shell脚本,这里,我使用的是UNIX时间戳,但是您可以使用任何与shell脚本语法兼容的时间格式:

pipeline {

    agent any

    environment {
        def BUILDVERSION = sh(script: "echo `date +%s`", returnStdout: true).trim()
    }

    stages {
        stage("Awesome Stage") {
            steps {
                echo "Current build version :: $BUILDVERSION"
            }
        }
    }
}

答案 6 :(得分:1)

BUILD_ID曾经用于提供此信息,但自Jenkins 1.597开始,他们就对其进行了更改以提供内部版本号。有关更多信息,请参见this

您可以使用Build Time Stamp插件来实现此目的,如其他答案中所述。

但是,如果不允许或不愿意使用插件,请遵循以下方法:

def BUILD_TIMESTAMP = null
withCredentials([usernamePassword(credentialsId: 'JenkinsCredentials', passwordVariable: 'JENKINS_PASSWORD', usernameVariable: 'JENKINS_USERNAME')]) {
   sh(script: "curl https://${JENKINS_USERNAME}:${JENKINS_PASSWORD}@<JENKINS_URL>/job/<JOB_NAME>/lastBuild/buildTimestamp", returnStdout: true).trim();
}
println BUILD_TIMESTAMP

这似乎有些矫kill过正,但可以成功完成工作。

应该添加用于访问Jenkins的凭据,并且需要在withCredentials语句中代替'JenkinsCredentials'传递ID。如果您的Jenkins不使用身份验证,则可以忽略该步骤。

答案 7 :(得分:0)

下面的答案显示了使用描述设置器插件&#34;&#34; regexp功能的另一种方法。这解决了我的问题,因为我无法在Jenkins上安装新的插件,因为权限问题:

Use build timestamp in setting build description Jenkins

答案 8 :(得分:0)

如果要为从浏览器到jenkins服务器的每个请求添加时间戳。 您可以参考jenkins碎屑发行者机制,还可以修改/scripts/hudson-behavior.js,在此处添加修改。因此它将时间戳转换为服务器。

    /**
     * Puts a hidden input field to the form so that the form submission will have the crumb value
     */
    appendToForm : function(form) {
        // add here. ..... you code
        if(this.fieldName==null)    return; // noop
        var div = document.createElement("div");
        div.innerHTML = "<input type=hidden name='"+this.fieldName+"' value='"+this.value+"'>";
        form.appendChild(div);
    }

答案 9 :(得分:0)

您可以使用Jenkins对象直接获取开始时间

Jenkins.getInstance().getItemByFullName(<your_job_name>).getBuildByNumber(<your_build_number>).getTime()

也在这里回答了: https://stackoverflow.com/a/63074829/1968948