一、jjb中的变量继承---官网定义
在JJB中可以为不同级别的变量定义默认值,这样用户可以覆盖job-templates中定义的变量。
每种定义类型的变量优先级如下:
- job-group
- project
- job-template
- 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版权协议,转载请附上原文出处链接和本声明。