我们有一个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}'
这个yaml文件导致15个Jenkins作业 - 所有这些都没有被禁用:
这种设置是否可以禁用特定的Jenkins作业?我无法找到如何覆盖“禁用”属性,例如詹金斯的工作“foo-lorem”。如何实现这一目标?
事实上,如果需要,我们需要能够覆盖任何Jenkins作业的任何属性。这可行吗?怎么样?
答案 0 :(得分:1)
在作业模板中,您希望添加一个disabled
属性,该属性从参数中获取其值。参数默认值可以设置为defaults
和project
级别。因此理论上你可以在工作级别传递禁用值:
- defaults: name: global disabled: false - job-template: name: 'build-{name}' defaults: global disabled: '{obj:disabled}' - project: name: myproject jobs: - 'build-{name}' - project: name: mydeadproject jobs: - 'build-{name}': disabled: true
注意obj:prefix是按原样传递布尔值。事实证明,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
在全局默认值中,变量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:
然后,您可以按工作传递prevent_run: true
:
- project:
name: lorem
jobNameFirstSegment:
- foo:
displayNameFirstSegment: 'Foo'
urlGitRepository: 'git@bitbucket.org:mycompany/foo.git'
prevent_run: true
禁用foo
值为jobNameFirstSegment
的所有作业。 I. e。它会禁用作业:
实现项目时,会创建变量的笛卡尔积以生成作业。这里没有办法将参数传递给特定的值。