【发布时间】:2018-11-13 23:41:49
【问题描述】:
为简洁起见,我将以下用于管道作业的托管 Jenkinsfile 剥离了阶段。
#!groovy
import groovy.json.JsonSlurperClassic
def json = new File("TEST_JSON.json").text
def data = new JsonSlurperClassic().parseText(json)
def string_1 = data.test
properties([
parameters([
string(defaultValue: string_1, description: 'STRING 1', name: 'STRING_1', trim: false),
string(defaultValue: string_1, description: 'STRING 2', name: 'STRING_2', trim: false),
[$class: 'ChoiceParameter', choiceType: 'PT_SINGLE_SELECT', description: 'MPSS Flavor',
filterLength: 1, filterable: true,
name: 'MPSS_FLAVOR', randomName: 'choice-parameter-10980926894589',
script: [
$class: 'GroovyScript',
fallbackScript: [classpath: [], sandbox: false, script: ''],
script: [
classpath: [], sandbox: false,
script: '''
import groovy.json.JsonSlurperClassic
def json = new File("TEST_JSON.json").text
def data = new JsonSlurperClassic().parseText(json)
mpss_flavors = []
for (option in data.options) {
println option
mpss_flavors.add(option.mpss_flavor)
}
return mpss_flavors
'''
]
]
],
[$class: 'CascadeChoiceParameter', choiceType: 'PT_SINGLE_SELECT', description: 'TARGET',
filterLength: 1, filterable: true,
name: 'TARGET', randomName: 'choice-parameter-10980967122105',
referencedParameters: 'MPSS_FLAVOR',
script: [
$class: 'GroovyScript',
fallbackScript: [classpath: [], sandbox: false, script: ''],
script: [
classpath: [], sandbox: false,
script: '''
import groovy.json.JsonSlurperClassic
def json = new File("TEST_JSON.json").text
def data = new JsonSlurperClassic().parseText(json)
targets = []
for (option in data.options) {
if (option.mpss_flavor == MPSS_FLAVOR) {
targets.add(option.target);
}
}
return targets;
'''
]
]
],
[$class: 'CascadeChoiceParameter', choiceType: 'PT_SINGLE_SELECT', description: 'Build Command',
filterLength: 1, filterable: true,
name: 'BUILD_CMD', randomName: 'choice-parameter-11980967122105',
referencedParameters: 'TARGET,MPSS_FLAVOR',
script: [
$class: 'GroovyScript',
fallbackScript: [classpath: [], sandbox: false, script: 'return ["ERROR"]'],
script: [
classpath: [], sandbox: false,
script: '''
import groovy.json.JsonSlurperClassic;
def json = new File("TEST_JSON.json").text;
def data = new JsonSlurperClassic().parseText(json);
build_cmds = [];
for (option in data.options) {
if ((option.mpss_flavor == MPSS_FLAVOR) && (option.target == TARGET)) {
build_cmds.addAll(option.build_commands);
}
}
return build_cmds;
'''
]
]
]
])
])
以下 JSON 文件包含配置
{
"test": "TEST STRING FROM JSON",
"options": [
{
"mpss_flavor": "MPSS1",
"target": "TARGET1",
"build_commands": [
"BUILD_COMMAND_1"
]
},
{
"mpss_flavor": "MPSS2",
"target": "TARGET2",
"build_commands": [
"BUILD_COMMAND_2",
"BUILD_COMMAND_3"
]
}
]
}
我想在更新 JOSN 文件时自动配置作业的参数(我完全清楚 JSON 更新后运行的第一个作业不会包含预期的更改,但这对我们来说没问题)。 MPSS_FLAVOR 和 TARGET 按预期显示值。但是 BUILD_CMD Choice 参数返回错误。当我在命令行中使用静态定义的MPSS_FLAVOR 和TARGET 运行常规脚本代码时,脚本工作正常并且返回的build_cmds 符合预期。但是通过 Jenkins UI 它显示为 ERROR (Fallback Script)
我已经尝试了几次迭代,但都没有成功。我确信有一个小错误,我可以弄清楚。
我的问题是有什么方法可以查看用于选择参数以隔离问题的脚本的打印日志。
更新 相同的代码适用于 Job 中定义的 Jenkins 文件。问题似乎特定于托管 Jenkins 文件
【问题讨论】: