我有一个带有活动的choices参数的参数化管道项目,其中选择列表由groovy脚本动态填充。我需要在脚本中检索和使用当前作业名称。以下行在Freestyle Projects中对我有用:
def jobName = this.binding.jenkinsProject.name
但是,当我尝试在Pipeline Project中使用它时,会得到:
No such property: jenkinsProject for class: groovy.lang.Binding
在Retrieving Jenkins job name using groovy script in Active Choice Reactive Parameter中指出,此问题已在Active Choices插件v1.4中得到解决。我正在使用2.2.1版,但问题仍然存在。该属性在Pipeline Project中不可用吗?有解决方法还是替代方法?
答案 0 :(得分:0)
如果您试图获取正在运行的作业中的当前构建作业名称
有一个内置的env变量:
JOB_BASE_NAME
您可以在
的Jenkins中查看可用的env变量列表
http://{hostname}/job/{jobname}/pipeline-syntax/globals
开玩笑地用您的詹金斯地址替换主机名,并用您在詹金斯中拥有的某些工作替换工作名。
我的詹金斯
处理管道作业。
如果您尝试在参数脚本中执行此操作,则不确定是否可行。
答案 1 :(得分:0)
我遇到了同样的问题,并提出了解决方案。 您可以使用Jenkins管道 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
批准脚本