Groovy Script не работает в задании Jenkins, но работает нормально из командной строки - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть следующий управляемый файл 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 возвращает ошибку. Когда я запускаю код скрипта groovy со статически определенными MPSS_FLAVOR и TARGET в командной строке, скрипт работает нормально, и возвращаемые build_cmds соответствуют ожиданиям. Однако через пользовательский интерфейс Jenkins он отображается как ERROR (резервный скрипт)

Я пробовал несколько итераций, но безуспешно. Я уверен, что есть небольшая ошибка, и я мог бы выяснить.

Мой вопрос, есть ли способ просмотреть журналы печати сценария, который используется для выбора параметра для выявления проблемы.

Обновление Тот же код отлично работает для файла Jenkins, определенного в Job. Кажется, проблема связана с файлом Managed Jenkins

1 Ответ

0 голосов
/ 13 ноября 2018

просто обернуть скрипт с try-catch

try{
   ...your parameter script here
}catch(Throwable t){
    return [t.toString()]
}

в этом случае вы увидите ошибку в качестве значения параметра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...