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.
#!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
"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). MPSS_FLAVOR
and TARGET
are showing the Values as intended. However the BUILD_CMD Choice parameter is returning an error. 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. However Through Jenkins UI It is showing as ERROR (Fallback Script)
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. issue seems to be specific to Managed Jenkins file
jenkins groovy
add a comment |
I have the following Managed Jenkinsfile for Pipeline Job stripped of the Stages for brevity.
#!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
"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). MPSS_FLAVOR
and TARGET
are showing the Values as intended. However the BUILD_CMD Choice parameter is returning an error. 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. However Through Jenkins UI It is showing as ERROR (Fallback Script)
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. issue seems to be specific to Managed Jenkins file
jenkins groovy
add a comment |
I have the following Managed Jenkinsfile for Pipeline Job stripped of the Stages for brevity.
#!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
"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). MPSS_FLAVOR
and TARGET
are showing the Values as intended. However the BUILD_CMD Choice parameter is returning an error. 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. However Through Jenkins UI It is showing as ERROR (Fallback Script)
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. issue seems to be specific to Managed Jenkins file
jenkins groovy
I have the following Managed Jenkinsfile for Pipeline Job stripped of the Stages for brevity.
#!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
"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). MPSS_FLAVOR
and TARGET
are showing the Values as intended. However the BUILD_CMD Choice parameter is returning an error. 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. However Through Jenkins UI It is showing as ERROR (Fallback Script)
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. issue seems to be specific to Managed Jenkins file
jenkins groovy
jenkins groovy
edited Nov 13 '18 at 15:41
rcreddy
asked Nov 13 '18 at 6:04
rcreddyrcreddy
355
355
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
just wrap script with try-catch
try
...your parameter script here
catch(Throwable t)
return [t.toString()]
in this case you'll see error as a parameter value
Daggett, I tried your suggestion and still see empty string. See update for further experiment
– rcreddy
Nov 13 '18 at 15:40
if you don't see any error - the problem in file+code. could it be that file is in utf-32 format? or contains some special headers (utf-8 BOM for example)
– daggett
Nov 13 '18 at 17:04
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53274752%2fgroovy-script-failing-in-jenkins-job-but-runs-fine-from-command-line%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
just wrap script with try-catch
try
...your parameter script here
catch(Throwable t)
return [t.toString()]
in this case you'll see error as a parameter value
Daggett, I tried your suggestion and still see empty string. See update for further experiment
– rcreddy
Nov 13 '18 at 15:40
if you don't see any error - the problem in file+code. could it be that file is in utf-32 format? or contains some special headers (utf-8 BOM for example)
– daggett
Nov 13 '18 at 17:04
add a comment |
just wrap script with try-catch
try
...your parameter script here
catch(Throwable t)
return [t.toString()]
in this case you'll see error as a parameter value
Daggett, I tried your suggestion and still see empty string. See update for further experiment
– rcreddy
Nov 13 '18 at 15:40
if you don't see any error - the problem in file+code. could it be that file is in utf-32 format? or contains some special headers (utf-8 BOM for example)
– daggett
Nov 13 '18 at 17:04
add a comment |
just wrap script with try-catch
try
...your parameter script here
catch(Throwable t)
return [t.toString()]
in this case you'll see error as a parameter value
just wrap script with try-catch
try
...your parameter script here
catch(Throwable t)
return [t.toString()]
in this case you'll see error as a parameter value
answered Nov 13 '18 at 8:16
daggettdaggett
7,75721529
7,75721529
Daggett, I tried your suggestion and still see empty string. See update for further experiment
– rcreddy
Nov 13 '18 at 15:40
if you don't see any error - the problem in file+code. could it be that file is in utf-32 format? or contains some special headers (utf-8 BOM for example)
– daggett
Nov 13 '18 at 17:04
add a comment |
Daggett, I tried your suggestion and still see empty string. See update for further experiment
– rcreddy
Nov 13 '18 at 15:40
if you don't see any error - the problem in file+code. could it be that file is in utf-32 format? or contains some special headers (utf-8 BOM for example)
– daggett
Nov 13 '18 at 17:04
Daggett, I tried your suggestion and still see empty string. See update for further experiment
– rcreddy
Nov 13 '18 at 15:40
Daggett, I tried your suggestion and still see empty string. See update for further experiment
– rcreddy
Nov 13 '18 at 15:40
if you don't see any error - the problem in file+code. could it be that file is in utf-32 format? or contains some special headers (utf-8 BOM for example)
– daggett
Nov 13 '18 at 17:04
if you don't see any error - the problem in file+code. could it be that file is in utf-32 format? or contains some special headers (utf-8 BOM for example)
– daggett
Nov 13 '18 at 17:04
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53274752%2fgroovy-script-failing-in-jenkins-job-but-runs-fine-from-command-line%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown