简体   繁体   English

Groovy 脚本在 Jenkins 作业中失败,但从命令行运行良好

[英]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_FLAVORTARGET按预期显示值。 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_FLAVORTARGET运行 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM