У меня есть следующий управляемый файл 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