jenkins - 在项目或继承的作业模板级别添加额外参数
问题描述
我正在寻找一种方法来允许 jjb 的某些实例job-template
添加其他参数,或者通过继承的子模板添加它们。
同样的事情确实适用于任何数组/列表/序列值键。我不想覆盖整个密钥,而是想追加它。可能有一些“n”级深,需要 YAML 锚点和合并键之类的东西。
所以要么:
project
实例化 a 的Ajob-template
可以添加自己的 extraparameters:
;或者job-template
继承/扩展另一个的 Ajob-template
可以添加额外的参数而不覆盖已经指定的参数。
我想要一个工作版本:
- job-template: &base-template
name: base-params
parameters:
- string:
name: foo
default: FOO
description: Foofoo
- project:
name: thing
jobs:
- more-params
parameters:
- !APPEND # This is wrong
- string:
name: bar
default: BAR
description: Baaaa
或这个:
- job-template: &base-template
name: base-params
parameters:
- string:
name: foo
default: FOO
description: Foofoo
- job-template:
name: more-params
<< : *base-template
parameters:
- !APPEND # This is wrong
- string:
name: bar
default: BAR
description: Baaaa
- project:
name: thing
jobs:
- more-params
或这个:
- job-template: &base-template
name: base-params
parameters: &base-template-parameters
- string:
name: foo
default: FOO
description: Foofoo
- job-template:
name: more-params
<< : *base-template
parameters:
- << &base-template-parameters # THIS IS WRONG
- string:
name: bar
default: BAR
description: Baaaa
- project:
name: thing
jobs:
- more-params
我看着job-template
用 YAML 继承创建一个孩子,然后在项目中使用它。但这看起来行不通,因为yaml 没有办法扩展/附加序列/列表。合并键不适用于列表,并且 yaml 规范不打算接受类似它们的任何内容;事实上,合并键正在被轻轻地弃用。
JJB 本身似乎没有提供一种方式来表示“此作业模板扩展了此其他作业模板,您应该合并parameters:
列表”。它依赖于 YAML 继承,在 JJB 本身而不是 YAML 阅读器中实现,但没有(可查找/记录的)列表等效项。
我怀疑 Jinja2 标签可能是可能的!j2
,但我完全不确定如何,或者这样做是否明智。
当然这是一个普遍的需求?前段时间我在 Ansible 上遇到过类似的问题。
到目前为止,我发现这样做的唯一方法是使用包含文件中的片段,这很难看,比如(未经测试)
# File base-template-params.yml.inc
- string:
name: foo
default: FOO
description: Foofoo
# File templates.yml
- job-template: &base-template
name: base-params
parameters:
!include base-template-params.yml.inc
- job-template:
name: more-params
<< : *base-template
parameters:
!include base-template-params.yml.inc
- string:
name: bar
default: BAR
description: Baaaa
- project:
name: thing
jobs:
- more-params
解决方案
不幸的是,您是对的,JJB 不支持此处提出的请求。当前 JJB 最接近的方法是在声明变量 {obj:variable_name_must_use_underscores} 时使用“obj:”键
- job-template:
name: base-params
######################
# Default parameters #
######################
job_params:
#####################
# Job configuration #
#####################
parameters: '{obj:job_params}'
- project:
name: thing
jobs:
- base-params
job_params:
- string:
name: foo
default: FOO
description: Foofoo
- string:
name: bar
default: BAR
description: Baaaa
这样做是在作业模板中设置一个默认的 job_params,它将应用于作业模板的所有用户。它可以选择提供覆盖默认 job_params 的能力,但正如您从示例中看到的那样,不幸的是,如果用户想要附加新参数,则需要重新定义默认 job_params。
当前的 JJB 2.x 不支持继承和扩展现有模板配置的方法,如果您覆盖,则需要覆盖整个部分。
推荐阅读
- github - 如何在 github 存储库上启用自定义域?
- reactjs - 尝试登录用户时 JWT Auth 给出错误
- python - 如何从维基百科中抓取非表格列表并创建数据框?
- python-3.x - 基于子字符串拆分字符串的 Pythonic 方法
- r - R tolower() 正在从 lapply 中的前一个向量元素添加字符串
- typescript - 打字稿,定义一个通用的代替对象
- python - Python - 2 个参数而不是一个?
- python - ValueError:x 和 y 必须具有相同的第一维,但具有形状 (23,) 和 (1,)
- mysql - 子查询显示多于一个行组
- c - 从 pthread 向主线程发送消息