我在jenkins文件中使用管道,我不知道如何正确链接Jenkins和管道中的作业。
我在jenkinsfile中定义了参数(一些是默认值,一些是没有),并且是根据来自jenkins gui的参数初始化的。问题是它接缝我的管道中的参数覆盖了我的作业参数,即使在管道中没有指定默认值,这意味着管道正在覆盖我在jenkins中的作业设置。
例如,我的一个工作是设置为运行带有一些特定值的管道(所有NON-EMPTY),如果我触发作业,管道似乎将属性重置为'''对于字段b和c。
如何让管道不接触我的jenkins作业定义?
e.g。管道中的参数:
properties([
parameters([
string(name: 'a', defaultValue: 'Default A value', description: '', ),
string(name: 'b', description: '', ),
string(name: 'c', description: '', ),
])
])
我在https://jenkins.io/doc/book/pipeline/syntax/#parameters-example
的文档中找不到任何帮助答案 0 :(得分:6)
啊,是的,它也是我第一次来到这里。
第一次运行管道时,jenkinsFile DSL作业定义几乎会覆盖您通过GUI输入的整个作业定义。这尤其会影响参数。
因此,请确保在Jenkins文件中确切地定义参数,然后运行一次作业,并且GUI将具有相同的参数配置,这样当您再次运行时,它将询问参数并使用您在DSL中指定的默认值。没有更多的东西。
是的,每次修改DSL中的参数都要运行两次很烦人。 但是如果你认为必须为要评估的DSL执行作业,那就更有意义了,但首先它需要通过UI定义一些参数,在它检查并评估DSL之前......
答案 1 :(得分:0)
可以通过添加特殊参数来避免覆盖默认值来解决此问题。这是示例代码。
if (!params.__INIT__) { // this value will be true once parameters get initialized
properties([ parameters([
string(name: 'SOURCE_URL', trim: true),
string(name: 'TARGET_URL', trim: true),
string(name: 'DEPLOY_URL', trim: true),
credentials(name: 'DEPLOY_KEY', required: true ),
string(name: 'BUILD_NODE', trim: true),
booleanParam(name: '__INIT__', defaultValue: true, description: "Uncheck this field in configuration page and run this job once if you want to re init parameter."),
]) ])
return // exit
}
// Your task stars from here
通过这种方式,由于__INIT__
已设置为true
,因此下次将不会再次初始化参数。另一方面,如果您更新脚本并更改某些参数,则只需取消选中__INIT__
字段即可运行作业。