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

Jenkins 如何从SCM中的管道刷新作业配置,jenkins,jenkins-pipeline,jenkins-declarative-pipeline,Jenkins,Jenkins Pipeline,Jenkins Declarative Pipeline,如果我向SCM中保存的管道脚本添加新作业参数,那么如何使用新参数更新UI?(由于尚未从SCM中提取管道,因此未运行作业且作业失败) 为了更详细地介绍,我向SCM中的管道脚本添加了一个新参数,如下所示: choice( choices: ['github', 'bitbucket'], description: 'Which repo to build from', name: 'repo') 然后在UI中单击作业->使用参数构建。现有的参数选择不包含新参数,因为Jenk

如果我向SCM中保存的管道脚本添加新作业参数,那么如何使用新参数更新UI?(由于尚未从SCM中提取管道,因此未运行作业且作业失败)

为了更详细地介绍,我向SCM中的管道脚本添加了一个新参数,如下所示:

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

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

这里的主要问题是,您需要基于环境变量或构建参数在管道中使用可选/有条件的
stage
。Jenkins声明性管道有,但它们不适用于脚本化管道(groovy在
Jenkinsfile
中)

我临时利用groovy闭包跳过了基于布尔构建参数的实际构建阶段

示例代码

import org.jenkinsci.plugins.pipeline.modeldefinition.Utils
/**
*用于根据标志跳过阶段的阶段执行帮助程序。
*
*@舞台的参数名称
*@参数执行布尔标志
*@如果标志为true,则要执行的参数块
*/
def阶段(名称、执行、块){
返回阶段(名称、执行?块:{
echo“跳过的阶段$name”
Utils.markStageSkippedForConditional(阶段名称)
})
}
节点(“主节点”){
试一试{
def参数列表=[]
//附加参数
parameterList.add(booleanParam(名称:“JUST_UPDATE_JOB_CONFIG”,说明:“JUST UPDATE the configuration of this JOB”))
性质([
参数(参数列表)
])
阶段('Update-JobConfig',JUST\u Update\u JOB\u CONFIG=='true'){
回显“更新的作业配置”
}
阶段('Build stage 1',JUST_UPDATE_JOB_CONFIG!=“true”){
//一些步骤
}
阶段('buildstage 2',JUST_UPDATE_JOB_CONFIG!=“true”){
//一些步骤
}
}捕获(e){
掷e
}
}
当我在SCM中更改我的管道代码时,我只是在选中了
just\u UPDATE\u job\u CONFIG
参数的情况下构建作业。这里的技巧是
def stage(…
,它实际上根据标志跳过了阶段


不确定这是否是正确的方法,但它确实对我有用。

当向许多相互触发的作业添加参数时,这是一种特别的痛苦。很有趣。我想这是一种方法。我使用的是一个声明性管道,它是一个Jenkins文件。我理解声明性和脚本式pi之间的区别pelines只是语法。