jenkins job builder定义job变量缺省值的覆盖顺序

一、jjb中的变量继承---官网定义

在JJB中可以为不同级别的变量定义默认值,这样用户可以覆盖job-templates中定义的变量。

每种定义类型的变量优先级如下:

  1. job-group
  2. project
  3. job-template
  4. defaults

从这个列表中我们可以看到,如果我们想在job-templates中覆盖变量,那么使用defaults配置是没用的,因为它具有最低优先级。

另一方面,job-group具有最高优先级。如果我们在job-group中定义一个变量并打算在项目级别覆盖它,是无法做到的。因此,请避免在job-group中设置变量,除非我们要对一组job强制执行设置并阻止projects覆盖它。

二、一些实践

对于project和job-template中变量定义的细节,我做了一些试验,结果如下:

1. 

- project:
    name: foo
    tasty: 'project-tasty'
    module:
      - apple:
          tasty: 'module-apple-tasty'
      - orange
    stream:
      - master:
          tasty: 'stream-master-tasty'
    jobs:
      - '{module}-verify-{stream}'

- job-template:
    name: '{module}-verify-{stream}'
    project-type: pipeline
    sandbox: true
    tasty: 'job-template-tasty'
    parameters:
        - string:
            name: TASTY
            default: '{tasty}'
    dsl:
        !include-raw-escape: '../../pipeline/kw/test.groovy'

apple-verify-master和orange-verify-master中的缺省参数均为:

猜测通过{module}-verify-{stream}这种方式生成job时,后边{stream}中的变量定义会覆盖前面{module}中的变量定义。

2. 然后我们去掉stream中的tasty变量定义:

- project:
    name: foo
    tasty: 'project-tasty'
    module:
      - apple:
          tasty: 'module-apple-tasty'
      - orange
    stream:
      - master
    jobs:
      - '{module}-verify-{stream}'

- job-template:
    name: '{module}-verify-{stream}'
    project-type: pipeline
    sandbox: true
    tasty: 'job-template-tasty'
    parameters:
        - string:
            name: TASTY
            default: '{tasty}'
    dsl:
        !include-raw-escape: '../../pipeline/kw/test.groovy'

apple-verify-master中的缺省参数:

现在为{module}中定义的参数了。orange-verify-master中的缺省参数:

为projects中定义的tasty变量的值。(project中定义的变量,默认会为所有的job-template生成这一变量值)

3. 最后我们去掉project中的tasty变量定义:

- project:
    name: foo
    module:
      - apple:
          tasty: 'module-apple-tasty'
      - orange
    stream:
      - master
    jobs:
      - '{module}-verify-{stream}'

- job-template:
    name: '{module}-verify-{stream}'
    project-type: pipeline
    sandbox: true
    tasty: 'job-template-tasty'
    parameters:
        - string:
            name: TASTY
            default: '{tasty}'
    dsl:
        !include-raw-escape: '../../pipeline/kw/test.groovy'

apple-verify-master中的缺省参数:

orange-verify-master中的缺省参数:

此时为job-template中默认定义的tasty变量值。

简单几个试验,不充分,仅供参考,如有错误请指正。


版权声明:本文为include_fight原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。