Как обновить конфигурацию задания из конвейера в SCM - PullRequest
0 голосов
/ 04 декабря 2018

Если я добавлю новый параметр задания в сценарий конвейера, хранящийся в SCM, как мне затем обновить пользовательский интерфейс с новым параметром?(без запуска и сбоя задания, потому что конвейер еще не был извлечен из SCM)

Для более подробной информации, я добавляю новый параметр в скрипт конвейера в SCM следующим образом:

choice(
    choices: ['github', 'bitbucket'],
    description: 'Which repo to build from',
    name: 'repo')

И затем нажмите на задание -> «построить с параметрами» в пользовательском интерфейсе.Существующий выбор параметров не содержит нового, потому что Дженкинс еще не получил его из SCM.Если бы мне нужно было запустить его сейчас, он бы потерпел неудачу (но в то же время обновил бы список параметров, поэтому в следующий раз, когда я "Построю с параметрами", он будет там.

1 Ответ

0 голосов
/ 05 декабря 2018

Основная проблема здесь заключается в том, что вы хотите необязательный / условный stage в конвейере, основанный на переменной среды или параметрах сборки.Декларативные конвейеры Jenkins имеют условных этапов , но они не работают со скриптовыми конвейерами (groovy в Jenkinsfile).

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

Пример кода

import org.jenkinsci.plugins.pipeline.modeldefinition.Utils

/**
 * Stage execution helper for skipping stages based on flag.
 *
 * @argument name of the stage
 * @argument execute boolean flag
 * @argument block to be execute if flag true
 */
def stage(name, execute, block) {
    return stage(name, execute ? block : {
        echo "Skipped stage $name"
        Utils.markStageSkippedForConditional(STAGE_NAME)
    })
}

node('master') {
    try {
        def parameterList = []
        // additional parameters
        parameterList.add(booleanParam(name: 'JUST_UPDATE_JOB_CONFIG', description: 'Just Update the configuration of this job'))
        properties([
            parameters(parameterList)
        ])
        stage('Update-JobConfig', JUST_UPDATE_JOB_CONFIG == 'true') {
            echo 'Updated Job Config'
        }
        stage('Build Stage 1', JUST_UPDATE_JOB_CONFIG != 'true') {
            // some steps
        }
        stage('Build Stage 2', JUST_UPDATE_JOB_CONFIG != 'true') {
            // some steps
        }
    } catch (e) {
        throw e
    }
}

Когда я изменяю свой конвейерный код в SCM, я просто строю работу с проверенным параметром JUST_UPDATE_JOB_CONFIG.Трюк здесь - def stage(..., который фактически пропускает этапы, основанные на флаге.

Не уверен, что это правильный способ сделать это, но он работает для меня.

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