Формулировка задачи:
Скажем, я хотел бы параметризованный тест в Jenkins, который получает выбор, предоставляемый из внешнего кода (это может быть, например, в Python). Внешний код находится на изображении docker, которое загружается в процессе тестирования. Естественно, обновленные параметры будут доступны для следующего теста.
Проблема:
Стандартное решение в конвейере блоков и параметрах не работает, даже если блок находится после теста (этапы блока) потому что groovy переменные не обновляются в блоке. Я предполагаю, что блок выполняется как начало блока конвейера независимо от того, где именно находится блок «параметры».
Решение:
Создаем этап обновления параметров, в котором скрипты предоставляют данные в переменных среды, а затем мы создаем экземпляры таких элементов управления, как:
stage('Update of wizard') {
steps {
container('the-container') {
script {
sh """
python script.py>results.txt
"""
# instantiation of controls
def CHOICE_Stage = choice(choices: ['mirror','develop'],
description: 'Stage',
name: 'Stage')
def RESULT_CHOICES=readFile("testset_results.txt")
CHOICE_AdvancedChoice = new com.cwctravel.hudson.plugins.extended_choice_parameter.ExtendedChoiceParameterDefinition(
"Advanced",
"PT_SINGLE_SELECT",
RESULT_CHOICES,
null,//project name
null,
null,
null,
null,// bindings
null,
null, // propertykey
"A", //default value
null,
null,
null,
null, //default bindings
null,
null,
null, //descriptionPropertyValue
null,
null,
null,
null,
null,
null,
null,// javascript file
null, // javascript
false, // save json param to file
false, // quote
5, // visible item count
"Select testset to execute",
","
)
params << CHOICE_Stage << CHOICE_AdvancedChoice
props << parameters(params)
properties(props)
}
}
}
}
Вопрос:
Есть ли возможность использовать стандартный блок параметров вместо блока stage? Знаете ли вы лучшее решение проблемы?