mos*_*ted 5 jenkins jenkins-job-builder
我们有一个 Jenkins 设置(目前未使用 Jenkins Job Builder 进行管理),其中每个 Web 项目都有 5 个非常相似的 Jenkins 作业。这是一个简化的 Jenkins Job Builder yaml 文件,可以满足我们的需求:
- defaults:
name: global
project-type: 'freestyle'
disabled: false
buildTargets: 'build'
- job-template:
name: '{jobNameFirstSegment}-{jobNameSecondSegment}'
defaults: global
builders:
- ant:
targets: '{buildTargets}'
buildfile: 'build.xml'
- project:
name: lorem
jobNameFirstSegment:
- foo:
displayNameFirstSegment: 'Foo'
urlGitRepository: 'git@bitbucket.org:mycompany/foo.git'
- bar:
displayNameFirstSegment: 'Bar'
urlGitRepository: 'git@bitbucket.org:mycompany/bar.git'
- baz:
displayNameFirstSegment: 'Baz'
urlGitRepository: 'git@bitbucket.org:mycompany/baz.git'
jobNameSecondSegment:
- lorem:
buildTargets: 'build-lorem'
- ipsum:
buildTargets: 'build-ipsum'
- dolor:
buildTargets: 'build-dolor'
- sit:
buildTargets: 'build-sit'
- amet:
buildTargets: 'build-amet'
jobs:
- '{jobNameFirstSegment}-{jobNameSecondSegment}'
Run Code Online (Sandbox Code Playgroud)
此 yaml 文件会生成 15 个 Jenkins 作业 - 所有作业均未禁用:
这种设置是否可以禁用特定的 Jenkins 作业?我无法找到如何覆盖例如 Jenkins 作业“foo-lorem”的“禁用”属性。如何才能实现这一目标?
事实上,如果需要,我们需要能够覆盖任何 Jenkins 作业的任何属性。这可行吗?如何?
在作业模板中,您想要添加一个disabled
从参数获取其值的属性。defaults
参数默认值可在和级别设置project
。所以理论上你可以在工作级别传递残疾人值:
- 默认值: 名称:全球 禁用:假 - 工作模板: 名称:'构建-{名称}' 默认值:全局 禁用:'{obj:禁用}' - 项目: 名称:我的项目 工作: - '构建-{名称}' - 项目: 名称: mydeadproject 工作: - '构建-{名称}': 禁用:真
注意 obj: 前缀是按原样传递布尔值。结果发现 JJB 中存在特定于参数的问题disabled
,因此您需要使用不同的变量(我prevent_run
在下面命名它):
- defaults:
name: global
prevent_run: false
- job-template:
name: 'build-{name}'
defaults: global
disabled: '{obj:prevent_run}'
- project:
name: myproject
jobs:
- 'build-{name}'
- project:
name: mydeadproject
jobs:
- 'build-{name}':
prevent_run: true
Run Code Online (Sandbox Code Playgroud)
在全局默认情况下,变量 Prevent_run 设置为 false 并传递到项目和作业模板。对于最后一个作业,将更具体的值传递给 mydeadproject。上面的代码片段生成了两个作业:
您可以在示例模板中重复使用相同的技巧:
--- reference.yaml 2015-09-08 09:27:56.000000000 +0200
+++ foo.yaml 2015-09-08 10:02:38.000000000 +0200
@@ -1,11 +1,13 @@
- defaults:
name: global
project-type: 'freestyle'
- disabled: false
+ prevent_run: false
buildTargets: 'build'
+
- job-template:
name: '{jobNameFirstSegment}-{jobNameSecondSegment}'
defaults: global
+ disabled: '{obj:prevent_run}'
builders:
- ant:
Run Code Online (Sandbox Code Playgroud)
然后,您可以prevent_run: true
根据每个作业传递:
- project:
name: lorem
jobNameFirstSegment:
- foo:
displayNameFirstSegment: 'Foo'
urlGitRepository: 'git@bitbucket.org:mycompany/foo.git'
prevent_run: true
Run Code Online (Sandbox Code Playgroud)
foo
这会禁用具有的值的所有作业jobNameFirstSegment
。IE。它会禁用以下作业:
当一个项目实现时,会创建变量的笛卡尔积来生成作业。这里无法将参数传递给特定的值对。
归档时间: |
|
查看次数: |
2628 次 |
最近记录: |