Groovy 要执行 "How to get a parameter depend of other parameter in Hudson or Jenkins" 的脚本?

Groovy script to implement "How to get a parameter depend of other parameter in Hudson or Jenkins"?

詹金斯 v2.289.3

我正在尝试实现 Active Choices plugin discussed in one of the answers in in How to get a parameter depend of other parameter in Hudson or Jenkins,但不确定如何实现我的第二个脚本以从第一个参数获取值。

我有一个 MyFolder 作业文件夹,其中包含名为 Builders 的多管道作业,以及 master, release/*, feature/* 等分支。因此,例如 release/1.0.0 作业,文件夹中作业的全名将是 MyFolder/Builders/release%2F1.0.0%2F/ 的转义字符)。

然后我在名为 DeployBranchVersion 的同一个文件夹中创建了第二个作业,其目标是执行部署代码以部署选定的分支及其相应的成功构建号。因此,我需要将 2 个参数传递给部署代码,GIT_BRANCHVERSION.

我的第一个 Active Choices 参数使用以下脚本获取这些分支,并将选择分配给 GIT_BRANCH 参数。

Job name: MyFolder/DeployBranchVersion
Parameter name: GIT_BRANCH

Groovy script:
def gettags = "git ls-remote -h -t https://username:password@bitbucket.org/organization/myrepo.git".execute()
def branches = []
def t1 = []
gettags.text.eachLine {branches.add(it)}
for(i in branches)
    t1.add(i.split()[1].replaceAll('\^\{\}', '').replaceAll('refs/heads/', '').replaceAll('refs/tags/', ''))
t1 = t1.unique()
return t1

这个 returns 我的 repo 中分支的下拉列表,所选分支被分配给 GIT_BRANCH 参数。

现在如何设置第二个 Active Choices Reactive 参数来引用上面的选择?我有以下 Groovy 代码,可在非 Active-Choice 参数设置中使用。我怎样才能修改它以在这种情况下工作? BUILD_JOB_NAME 需要引用第一个参数的 GIT_BRANCH 值?

import hudson.model.*

BUILD_JOB_NAME = "some_reference_to_GIT_BRANCH" // ??????????

def getJobs() {
    def hi = Hudson.instance
    return hi.getItems(Job)
}

def getBuildJob() {
    def buildJob = null
    def jobs = getJobs()
    (jobs).each { job ->
        if (job.fullName == BUILD_JOB_NAME) {
            buildJob = job
        }
    }
    return buildJob
}

def getAllBuildNumbers(Job job) {
    def buildNumbers = []
    (job.getBuilds()).each { build ->
        def status = build.getBuildStatusSummary().message
        if (status.contains("stable") || status.contains("normal")) {
           buildNumbers.add("${build.displayName}")
        }
    }
    return buildNumbers
}

def buildJob = getBuildJob()
return getAllBuildNumbers(buildJob)

我试过这样设置,效果不错。

BUILD_JOB_NAME = "MyFolder/Builders/$GIT_BRANCH"

事实证明我做对了,我只是有一个错误的第二个脚本。这是好的。我意识到 GIT_BRANCH 值中有 / 所以我不得不用等效的转义字符 %2F.

替换它们
import hudson.model.*

BRANCH = GIT_BRANCH.replaceAll("/", "%2F")
BUILD_JOB_NAME = "MyFolder/Builders/$BRANCH"

def getJobs() {
    def hi = Hudson.instance
    return hi.getAllItems(Job.class)
}

def getBuildJob() {
    def buildJob = null
    def jobs = getJobs()
    (jobs).each { job ->
        if (job.fullName == BUILD_JOB_NAME) {
            buildJob = job
        }
    }
    return buildJob
}

def getAllBuildNumbers(Job job) {
    def buildNumbers = []
    (job.getBuilds()).each { build ->
        def status = build.getBuildStatusSummary().message
        if ((status.contains("stable") || status.contains("normal")) &&
              build.displayName.contains("-")) {
           buildNumbers.add(build.displayName)
        }
    }
    return buildNumbers
}

def buildJob = getBuildJob()
return getAllBuildNumbers(buildJob)