如何从SCM中的管道刷新作业配置

时间:2018-12-04 14:31:23

标签: jenkins jenkins-pipeline jenkins-declarative-pipeline

如果将新的作业参数添加到SCM中保存的管道脚本中,那么如何使用新参数更新UI? (因为管道尚未从SCM拔出,所以没有运行且作业失败)

要详细介绍,我将新参数添加到SCM中的管道脚本中,如下所示:

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

然后单击作业-> UI中的“使用参数构建”。现有的参数选择不包含新参数,因为Jenkins尚未从SCM检索到它。如果我现在要运行,它将失败(但同时也会更新参数列表,因此,下次我用参数构建时,它将在那儿。

1 个答案:

答案 0 :(得分:0)

这里的主要问题是您希望基于环境变量或构建参数在管道中使用可选/条件stage。 Jenkins声明性管道具有conditional stages,但是它们不适用于脚本管道(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(...,它实际上会根据标志跳过阶段。

不确定这样做是否正确,但这对我有用。