管道参数和jenkins GUI参数如何协同工作?

时间:2017-06-08 14:42:44

标签: jenkins jenkins-pipeline

我在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

的文档中找不到任何帮助

2 个答案:

答案 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__字段即可运行作业。