如何确保在运行Jenkins管道之前更新参数列表?

Lam*_*bda 13 jenkins jenkins-pipeline

Jenkins管道项目配置为Jenkinsfile从Git仓库获取它:

管道定义

如果我更改参数列表,例如,从:

properties([
        parameters([
                string(name: 'FOO', description: 'Choose foo')
        ])
])
Run Code Online (Sandbox Code Playgroud)

至:

properties([
        parameters([
                string(name: 'FOO', description: 'Choose foo'),
                string(name: 'BAR', description: 'Choose bar')
        ])
])
Run Code Online (Sandbox Code Playgroud)

并运行构建,第一次运行不显示新添加的BAR参数:

参数列表未更新

由于更新的Jenkins文件需要存在BAR参数,这会导致更改后的第一个构建失败,因为没有向用户显示输入此值的输入.

有办法防止这种情况吗?Jenkinsfile在显示参数输入页面之前确保它是最新的?

dol*_*phy 7

简短的答案:不。如果有一些与构建分开的解析和处理Jenkinsfile的工具,那会很好,但是没有。

Jenkins在获取,解析和运行Jenkinsfile之前不知道新参数,唯一的方法是...运行构建。

实际上,构建历史将始终“落后于” Jenkinsfile。当您更改Jenkinsfile中的内容时,下一个构建将使用“旧的” Jenkinsfile运行,但是之后为该构建选择并处理新的Jenkinsfile。


小智 2

我有一个函数会跳过构建,除非作业具有所有必需的参数,例如:

if (job.hasParameters(['FOO', 'BAR'])) {
    // pipeline code
}
Run Code Online (Sandbox Code Playgroud)