我有一组詹金斯的工作基本相同。我已经创建了一个创建所有模板的作业模板。但是,有些开发人员没有其他开发人员(即,链中的第一个不会复制其他项目的构件),而有些则拥有其他开发人员没有的发布者(他们都没有JUnit测试)。
我想根据变量有条件地包括这些模块,但是我找不到做到这一点的方法:
这可能吗?我想在一些工作中加入下面的评论部分。
43 builders:
44 - shell: |
45 echo Removing working directory from previous run
46 rm -rf ${{WORKSPACE}}/css-build/working
47 # - copyartifact:
48 # project: "{previous-project}"
49 # whichbuild: last-successful
50 # optional: "{copy-optional}"
51 - shell: |
52 {init-shell}
53 ${{WORKSPACE}}/css-build/build-util.sh {shell-args} ${{WORKSPACE}}/{location} -w ${{WORKSPACE}}/css-b uild/working
答案 0 :(得分:0)
好吧,这是解决方法:
定义一个与原始模块名称不同的新模块(在这种情况下,它将是一个生成器)。如果存在omit
标签,请不要执行任何操作;否则,无论如何都要做。
def optional_copy(registry, xml_parent, data):
if data['omit'].lower() == 'true':
return
else:
new_data = collections.OrderedDict()
new_data['copyartifact'] = data
registry.dispatch('builder', xml_parent, new_data)
将其注册到setup.py
中的jjb:
setup(
name='JJB config',
py_modules = ['optionals'],
entry_points={
'jenkins_jobs.builders': [
'optional-copy=optionals:optional_copy'
]
}
)
然后,在您的Yaml中,您可以使用optional-copy
模块和omit
属性:
builders:
- shell: |
echo Removing working directory from previous run
rm -rf "{working-dir}"
- optional-copy:
omit: "{omit-copy}"
project: "{prev}"
whichbuild: last-successful
- shell: |
{init-shell}
${{WORKSPACE}}/css-build/build-util.sh -u {diirt-version} {shell-args} -p ${{WORKSPACE}}/{location} -w "{working-dir}"
答案 1 :(得分:0)
对于您的问题,我有一种解决方法,它不需要扩展工作构建器。 但这需要在詹金斯上使用Conditional build step plugin。
可选构建器的示例:
- job-template
id: my-custom-template
builders:
- conditional-step:
condition-kind: always
steps: "{obj:optional_builders|[]}"
以此,您可以使用optional_builders
变量将构建器添加到您的工作中(如果需要)。
jobs:
#With optional_builders
- my-custom-template:
optional_builders:
- copyartifact:
project: "{previous-project}"
whichbuild: last-successful
#Without optional_builders
- my-custom-template:
可选发布者的示例:
publishers:
- conditional-publisher:
- condition-kind: always
action: "{obj:optional_publishers|[]}"