我试图使用您的 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下拉菜单。
如有任何帮助,我们将不胜感激。谢谢。
getBranchesOfEnv 方法是在参数之外定义的。它可能无法在参数脚本内访问。 Jenkins 的 DSL 范围可能不允许直接调用这种方法。
你可以用这个例子来解决:
def getBranchesOfEnv(env) {
// your code here
}
if (ENV.equals("PROD") || ENV.equals("DEV")) {
return getBranchesOfEnv(ENV)
} else {
return ["N/A"]
}