如何从 Jenkins 声明式管道中的主动选择参数脚本调用方法?

问题描述 投票:0回答:1

我试图使用您的 Active Choice 插件根据另一个选择的参数动态更改我的构建选项之一。 我编写了一个 Groovy 脚本,该脚本调用在参数范围之外声明的方法,该方法应返回基于其他参数的选项列表。 请查看这段代码(我对其进行了一些更改以简化):

def getBranchesOfEnv(env) {
     def output = sh(script: "git branch", returnStdout: true)
     def branches = output.readLines()
     println("Branches list: ${branches}")
     return branches
}
 
properties([
     parameters([
          choice (
               name: 'ENV',
               choices: ['PROD', 'DEV', 'TEST',],
               description: 'Select environment'
          ),
          [
               $class: 'CascadeChoiceParameter',
               choiceType: 'PT_SINGLE_SELECT',
               description: 'Select branch',
               name: 'BRANCH',
               referencedParameters: 'ENV',
               filterable: true,
               script: [
                    $class: 'GroovyScript',
                    fallbackScript: [
                         classpath: [],
                         sandbox: true,
                         script: "return ['Could not get Environment from ENV Param']"
                    ],
                    script: [
                         classpath: [],
                         sandbox: true,
                         script: '''
                         if (ENV.equals("PROD") || ENV.equals("DEV")) {
                              return getBranchesOfEnv(ENV)
                         } else {
                              return ["N/A"]
                         }
                         '''
                    ]
               ]
          ]
     ])
])

我也尝试调用这样的方法: return "${getBranchesOfEnv(ENV)}" 但没有成功。我总是在下拉列表中得到后备脚本结果。

如果我将脚本更改为这些引号“”并调用“${getBranchesOfEnvRepo(ENV)}”,它将仅检索默认的“PROD”值,并将 ENV 参数更改为“DEV”,例如,不会影响 BRNACH下拉菜单。

如有任何帮助,我们将不胜感激。谢谢。

jenkins groovy jenkins-plugins jenkins-groovy
1个回答
0
投票

getBranchesOfEnv 方法是在参数之外定义的。它可能无法在参数脚本内访问。 Jenkins 的 DSL 范围可能不允许直接调用这种方法。

你可以用这个例子来解决:

    def getBranchesOfEnv(env) {
        // your code here
    }
    if (ENV.equals("PROD") || ENV.equals("DEV")) {
        return getBranchesOfEnv(ENV)
    } else {
        return ["N/A"]
    }

© www.soinside.com 2019 - 2024. All rights reserved.