Параметры конвейера Jenkins, предоставленные из внешнего кода - PullRequest
0 голосов
/ 04 августа 2020

Формулировка задачи:

Скажем, я хотел бы параметризованный тест в 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? Знаете ли вы лучшее решение проблемы?

...