我有一个 JJB 项目,我想通过引用它们来重用参数定义(参见 doc)。
一般来说,这有效:
- defaults:
name: "some-defaults"
param_1:
string:
name: PARAM1
default: "some default value"
- job-template:
name: "first-job"
defaults: "some-defaults"
parameters:
- '{obj:param_1}'
通过这种方式,我可以重用任何对象,这在必须管理冗余参数列表时会派上用场。
但是问题来了:一旦我在那些引用的对象中使用参数(不要与parameters
关键字混淆),例如default: {some-dynamic-default-value}
,那些不会得到解决。
这是一个完整的例子:
- defaults:
name: "some-defaults"
param_1:
string:
name: PARAM1
description: Some Job Parameter
default: '{param1-default}'
param_2:
string:
name: PARAM2
description: Another Job Parameter
default: '{param2-default}'
- job-template:
name: "first-job"
defaults: "some-defaults"
param1-default: "SOME PARAM1 DEFAULT"
param2-default: "SOME PARAM2 DEFAULT"
parameters:
- '{obj:param_1}'
- '{obj:param_2}'
- job-template:
name: "second-job"
defaults: "some-defaults"
param1-default: "OTHER PARAM1 DEFAULT"
param2-default: "OTHER PARAM2 DEFAULT"
parameters:
- '{obj:param_1}'
- '{obj:param_2}'
- project:
name: "some-project"
jobs:
- "first-job"
- "second-job"
该文件可以通过运行转换为 Jenkins 配置
jenkins-jobs test test.yml
但在生成的 XML 中,您可以看到参数引用(此处'{param1-default}'
)没有得到解析:
...
<hudson.model.ParametersDefinitionProperty>
<parameterDefinitions>
<hudson.model.StringParameterDefinition>
<name>PARAM1</name>
<description>Some Job Parameter</description>
<defaultValue>{param1-default}</defaultValue>
<trim>false</trim>
</hudson.model.StringParameterDefinition>
</parameterDefinitions>
</hudson.model.ParametersDefinitionProperty>
...
奇怪的是,如果您没有为 JJB定义任何值,则会param1-default
抱怨param1-default
丢失:
jenkins_jobs.errors.JenkinsJobsException: param1-default parameter missing to format {param1-default}
Given:
{'': '',
'defaults': 'some-defaults',
'name': 'some-project',
'param_1': OrderedDict([('string',
OrderedDict([('name', 'PARAM1'),
('description', 'Some Job Parameter'),
('default', '{param1-default}')]))]),
'param_2': OrderedDict([('string',
OrderedDict([('name', 'PARAM2'),
('description', 'Another Job Parameter'),
('default', '{param2-default}')]))]),
我在这里做错了什么?有没有办法重用像参数定义这样的对象,其内容中有变量并扩展它们?
更新:由于我错过了定义可重用参数的更通用方法(请参阅我的答案),因此我相应地更新了标题。