我正在使用jenkinsfile中的管道,我不确定如何正确链接Jenkins中的作业和管道。
我在我的jenkinsfile中定义了参数(一些有默认值,一些没有),并从jenkins gui的参数中初始化了它们。问题是我的管道中的参数覆盖了我的作业参数,即使管道中没有指定默认值这意味着管道覆盖了我在jenkins中的作业设置。
例如,我的一个作业被设置为使用一些特定值(所有NON-EMPTY)运行管道,如果我触发该作业,管道似乎将字段b和c的属性重置为''。
如何让管道不触及我的Jenkins作业定义?
例如,流水线中的参数:
properties([
parameters([
string(name: 'a', defaultValue: 'Default A value', description: '', ),
string(name: 'b', description: '', ),
string(name: 'c', description: '', ),
])
])
我在www.example.com的文档中找不到任何帮助https://jenkins.io/doc/book/pipeline/syntax/#parameters-example
3条答案
按热度按时间llew8vvj1#
啊,是的,我第一次也是这样。
第一次运行管道时,jenkinsFile DSL作业定义几乎覆盖了您通过GUI输入的整个作业定义。这尤其会影响参数。
因此,请确保您在Jenkinsfile中准确地定义了参数,然后运行一次作业,GUI将具有相同的参数配置,因此当您再次运行时,它将要求参数并使用您在DSL中指定的默认值。没什么了。
是的,每次修改DSL中的参数都要运行两次,这很烦人。但是如果你考虑到这个作业必须执行才能评估DSL,那么这是有意义的,但是首先它需要请求参数,如果你通过UI定义了一些参数,在它检查和评估DSL之前……
dgtucam12#
这个问题可以通过添加一个特殊的参数来解决,以避免默认值被覆盖。下面是示例代码。
通过这种方式,参数将不会再次初始化,因为
__INIT__
已被设置为true
。另一方面,如果更新脚本并更改某些参数,则只需取消选中__INIT__
字段即可运行作业。hjqgdpho3#
老问题了,现在可能有一些更好的解决方案,但我没有找到它们,所以无论如何都要发布这个,以防它有帮助。
@link69的回答真的很好,让我想到了一些更高级的东西,
这允许选择用户提供的值是否被存储为默认值。
在我这边,有一些参数我希望是“一次性的”,例如“调试构建”,而我希望能够从UI设置一些持久的参数(例如要使用的git分支)。
主要缺点是管道不知道参数是从项目的“配置”页面还是在“使用参数构建”中修改的,并且在两种情况下都将值保存为“默认值”。我也不喜欢为
parameters
块中的每个参数重复两次参数名。