我遇到了同样的问题,并想出了一个解决方案。
你可以使用 Jenkins pipeline 的
currentBuild 变量,更多关于它的属性 - 在你的 Jenkins 服务器上打开页面
jenkins-server-url/jenkins/pipeline-syntax/globals。
String currentJobParentFolderName = currentBuild.fullProjectName.split('/')[0]
String currentJobName = currentBuild.projectName
String paramValue = getParamValue(currentJobName)
properties([
buildDiscarder(logRotator(daysToKeepStr: '10')),
disableResume(),
parameters([
[$class: 'CascadeChoiceParameter',
name: 'PARAM',
choiceType: 'PT_SINGLE_SELECT',
description: 'param1',
filterLength: 1,
filterable: false,
randomName: 'choice-parameter-99999999999',
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [],
sandbox: false,
script:
'return ["Failed to get values"]'
],
script: [
classpath: [],
sandbox: false,
script:
"""return ['$paramValue']"""
]
]
]
])
])
timestamps {
job's main logic
}
private static def getParamValue(String jobName) {
Map paramValMapping = [
'jobName1': 'value1',
'jobName2': 'value2',
]
String paramValue = paramValMapping.get(jobName)
if (!paramValue) {
throw new Exception("Failed to get value")
}
return paramValue
}
currentBuild.fullProjectName - 包括上层文件夹的作业名称(我需要这个)
currentBuild.projectName - 只是一个作业名称
不幸的是,我没有成功将所有这些逻辑放在CascadeChoiceParameter脚本部分内。
此外,我只需要一个值,但是这种方法也可以用于值列表,只需不要忘记为字符串值添加引号。
请注意,这样的脚本更改可能需要Jenkins管理员在jenkins/scriptApproval中批准每个传入值paramValue。