【问题标题】:How do I get the build number from where I executed a rebuild?如何从执行重建的位置获取内部版本号?
【发布时间】:2019-01-29 04:14:46
【问题描述】:

当我从构建页面单击“重建”时,jenkins 会重建并运行一个新作业 - 一个具有新 jenkins 内部版本号的新作业。

如何获取执行重建的作业的内部版本号?

我不是在谈论以前的内部版本号。

说我在构建 10。我去构建 5 并单击重建。如何像使用env.BUILD_NUMBER 一样从管道内部获取内部版本号 (5)?

【问题讨论】:

    标签: jenkins jenkins-plugins jenkins-pipeline


    【解决方案1】:

    我假设您正在使用 Groovy Pipeline 并且已经知道全局变量(请参阅全局变量参考)。

    1. currentBuild 变量有一个字段 rawBuild,它返回一个 hudson.model.Run 对象
    2. 调用rawBuildObject#getCauses()rawBuildObject#getCauses() 并返回一些原因对象。

    下面的脚本:

    node {
        stage('test advance script') {
                echo "current build number: ${currentBuild.number}"
                echo "previous build number: ${currentBuild.previousBuild.getNumber()}"
                def causes = currentBuild.rawBuild.getCauses()
                echo "causes: ${causes}"
                def rebuildCause0 = currentBuild.rawBuild.getCause(com.sonyericsson.rebuild.RebuildCause)
                echo "rebuildCause0: ${rebuildCause0}"
                echo "rebuild up number: ${rebuildCause0.getUpstreamBuild()}"
            }
    }
    

    但正如我们在聊天中讨论的那样,Rebuilder 插件以错误的方式使用 CauseAction。如果固定为this,控制台输出应该是:

    current build number: 72
    previous build number: 71
    causes: [hudson.model.Cause$UserIdCause@679c1066, job/DMP/job/test-pipeline/63[hudson.model.Cause$UserIdCause@679c1066]]
    rebuildCause0: job/DMP/job/test-pipeline/63[hudson.model.Cause$UserIdCause@679c1066]
    rebuild up number: 63
    

    当你看到这样的错误时记得scriptApproval

    Scripts not permitted to use method hudson.model.Run getCauses. Administrators can decide whether to approve or reject this signature.

    【讨论】:

    • 这似乎不起作用。回显“${causes}”只会显示[hudson.model.Cause$UserIdCause@ad8c8004]。并尝试调用 getOriginalNumber 抛出 Cannot invoke method getOriginalNumber() on null object
    • 这是“重建”而不是“重播”。这可能是我想要的javadoc.jenkins.io/plugin/project-inheritance/hudson/plugins/…。我如何使用它?
    • 抱歉,我不知道你所说的“重建”是什么意思。当我在作业的构建历史上单击“重播”时,我的答案有效。
    • 我阅读了上面提到的 ReBuilder 插件的源代码。我发现这个插件使用 CauseAction WRONG。
    【解决方案2】:

    假设您可以 curl 自己的 jenkins 构建:

    def getOriginalRebuildNum(String jobUrl = "${JOB_URL}"){
        def urlJsonPath
        def buildNumber
        def result
        ansiColor('xterm') {
            try {
                buildNumber = "${BUILD_NUMBER}"
                urlJsonPath = "${JOB_URL}/${buildNumber}/api/json"
                while (!buildNumber.isEmpty()) {
                    result = buildNumber
                    buildNumber = sh(
                            script:
                                    """
                                curl -s $urlJsonPath \
                                    | jq -r '.actions[] 
                                    | select(."_class" == "hudson.model.CauseAction") .causes[] 
                                    | select(.upstreamBuild != null).upstreamBuild'
                                    """,
                            returnStdout: true).trim()
                    urlJsonPath = "${JOB_URL}/${buildNumber}/api/json"
                }
                echo "Original Build: ${JOB_URL}/${result}/"
            }
            catch (err) {
                "Error: Could not retrieve original Build Number from ${urlJsonPath} - $err"
                result = "${BUILD_NUMBER}"
            }
        }
        return result
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      相关资源
      最近更新 更多