[英]Groovy Script failing in Jenkins job but runs fine from command line
I have the following Managed Jenkinsfile for Pipeline Job stripped of the Stages for brevity.为简洁起见,我将以下 Managed Jenkinsfile for Pipeline Job 剥离了阶段。
#!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;
'''
]
]
]
])
])
And the following JSON File containg the configurations以及以下包含配置的 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"
]
}
]
}
I would like to configure the Parameters for the Job automatically when the JOSN file is updated (I am fully aware that the first Job run after the JSON Update will not contain the intended changes, but that is Ok for us).我想在 JOSN 文件更新时自动配置作业的参数(我完全知道 JSON 更新后运行的第一个作业将不包含预期的更改,但这对我们来说没问题)。 MPSS_FLAVOR
and TARGET
are showing the Values as intended. MPSS_FLAVOR
和TARGET
按预期显示值。 However the BUILD_CMD Choice parameter is returning an error.但是, BUILD_CMD Choice 参数返回错误。 When I run the groovy script code with Statically defined MPSS_FLAVOR
and TARGET
in command line the Script works fine and the returned build_cmds
are as expected.当我在命令行中使用静态定义的MPSS_FLAVOR
和TARGET
运行 groovy 脚本代码时,脚本工作正常,并且返回的build_cmds
符合预期。 However Through Jenkins UI It is showing as ERROR (Fallback Script)但是通过Jenkins UI它显示为错误(后备脚本)
I have tried several iterations without any success.我已经尝试了几次迭代,但都没有成功。 I am sure there is a minor mistake and I Could Figure out.我确定有一个小错误,我可以弄清楚。
My Question is there any way to see the print Logs of the script that is used for choice parameter to isolate the issue.我的问题是有什么方法可以查看用于选择参数的脚本的打印日志以隔离问题。
Update Same code works fine for Jenkins file defined within the Job.更新相同的代码适用于作业中定义的 Jenkins 文件。 issue seems to be specific to Managed Jenkins file问题似乎特定于托管 Jenkins 文件
just wrap script with try-catch只需使用 try-catch 包装脚本
try{
...your parameter script here
}catch(Throwable t){
return [t.toString()]
}
in this case you'll see error as a parameter value在这种情况下,您将看到错误作为参数值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.