Jenkins管道项目被配置为从Git repo中获取其Jenkinsfile
:
如果我更改参数列表,例如,从:
properties([
parameters([
string(name: 'FOO', description: 'Choose foo')
])
])
致:
properties([
parameters([
string(name: 'FOO', description: 'Choose foo'),
string(name: 'BAR', description: 'Choose bar')
])
])
并运行构建,第一次运行时不显示新添加的BAR
参数:
由于更新后的Jenkins文件期望存在BAR
参数,这会导致更改后的第一次构建失败,因为用户没有输入该值。
有什么方法可以防止这种情况吗?在显示参数输入页面之前确保Jenkinsfile
是最新的?
6条答案
按热度按时间c9x0cxw01#
简短回答:没有。如果有一些工具可以解析和处理Jenkinsfile,与构建分开,那就太好了,但是没有。
Jenkins在检索、解析和运行Jenkinsfile之前并不知道新参数,唯一的方法就是...运行构建。
实际上,构建历史将始终“落后于”Jenkinsfile;当你改变Jenkinsfile中的某些东西时,下一个构建将使用“旧的”Jenkinsfile运行,但是在那之后为构建选择和处理新的Jenkinsfile。
zf2sa74q2#
解决这个问题的唯一方法是手动添加一个“skip_run”布尔参数,然后在作业的每个阶段添加一个when{}子句。
...
当然,这很容易出错。
或者,您可以添加一个阶段作为管道的开始,并故意使构建失败。
更新:感谢Abort current build from pipeline in Jenkins,我想出了这个解决方案:
为了防止构建实际上显示为红色,您可以使用try - catch Package 此构建并优雅地退出构建。
wz8daaqr3#
我有一个函数,除非作业具有所有必需的参数,否则会跳过构建,例如:
wr98u20j4#
几年前在Jenkins中报告了一个与此问题https://issues.jenkins-ci.org/browse/JENKINS-41929相关的问题
还在开着所以还没有好的解决办法
41ik7eoe5#
以下方法的思想是定义一次默认值,并且如果参数还不存在,则不会使管道失败-这是第一次运行时的情况。
示例:
0lvr5msh6#
试试..