Я ищу способ разрешить некоторым экземплярам jjb job-template
добавлять дополнительные параметры или добавлять их через унаследованный дочерний шаблон.
То же самое действительно относится к любому ключу массива / списка / последовательности. Вместо того, чтобы переопределять весь ключ, я хочу добавить к нему. Возможно, несколько уровней n, требующих чего-то вроде якорей YAML и ключей слияния.
Так что либо:
- A
project
, который создает экземпляр job-template
, может добавить свой собственный дополнительный parameters:
; или
- A
job-template
, который наследует / расширяет другой job-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, но не имеет (доступного для поиска / документированного) списка эквивалентов.
Я подозреваю, что это может быть возможно с !j2
тегами Jinja2, но я не совсем уверен, как, или если это разумно пойти таким путем.
Конечно, это общая потребность? У меня были похожие проблемы с 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