Конкурсный вызов из другой работы с параметрами
У меня есть работа со многими задачами, как это:
- name: main-job
serial: true
plan:
- aggregate:
- get: <git-resource>
passed: [previous-job]
trigger: true
- get: <git-resource-3>
- task: <task-1>
file: <git-resource>/<path>/<task-1-no-db>.yml
- task: <task-2>
tags: ['<specific-tag>']
file: <git-resource>/<path>/<task-1>.yml
params:
DATABASE_HOST: <file>
DATABASE: <my-db-1>
- task: <task-2>
tags: ['<specific-tag>']
file: <git-resource>/<path>/<task-1>.yml
params:
DATABASE_HOST: <file>
DATABASE: <my-db-1>
Проблема для меня в том, что я должен буквально вызывать ту же самую работу, но вместо того, чтобы параметры DATABASE были my-db-1
Я хочу, чтобы это было my-db-2
,
Единственный способ, которым я могу сделать это, это получить новую работу и передать параметры, буквально скопировать весь набор строк. Моя работа слишком толстая, так как в ней слишком много задач, поэтому копирование ее, хотя и является очевидным решением, мне интересно, есть ли способ для повторного использования, имея несколько конвейеров и один главный конвейер, который по существу вызывает эти конвейеры с помощью параметр для DATABASE передан или имеет два небольших задания, которые вызывают это основное задание с разными параметрами примерно так:
- name: <call-main-job-with-db-1>
serial: true
plan:
- aggregate:
- get: <git-resource>
passed: [previous-job]
trigger: true
- task: <call-main-job-task>
params:
DATABASE_HOST: <file>
DATABASE: <my-db-1>
- name: <call-main-job-with-db-2>
serial: true
plan:
- aggregate:
- get: <git-resource>
passed: [previous-job]
trigger: true
- task: <call-main-job-task>
params:
DATABASE: <my-db-2>
Я не уверен, возможно ли это вообще, так как я не нашел ни одного примера.
3 ответа
Вам нужно просто скопировать и вставить задачу, как в описании вопроса. Concourse ожидает выразительный yaml, ветвление или логика не допускаются. Если вы не хотите копировать и вставлять так много yaml, то вы можете сделать магию генерации yaml, чтобы упростить то, на что вы смотрите и с чем работаете, но для конкурса будет необходим полный yaml с каждым заданием, определенным отдельно.
Помните, что вы используете YAML, поэтому вы можете использовать функции YAML, такие как "Якоря"
Вы найдете дополнительную информацию об "Якорях" по этой ссылке. Ищите "ДОПОЛНИТЕЛЬНЫЕ ФУНКЦИИ YAML"
В YAML также есть удобная функция под названием "якоря", которая позволяет легко дублировать содержимое в документе. Оба эти ключа будут иметь одинаковое значение: anchored_content: &anchor_name Эта строка будет отображаться как значение двух ключей. other_anchor: *anchor_name
# Anchors can be used to duplicate/inherit properties base: &base name: Everyone has same name foo: &foo <<: *base age: 10 bar: &bar <<: *base age: 20
Попробуйте это для своего Concourse Pipeline:
common:
db_common: &db_common
serial: true
plan:
- aggregate:
- get: <git-resource>
passed: [previous-job]
trigger: true
- task: <call-main-job-task>
params:
jobs:
- name: <call-main-job-with-db-1>
<<: *db_common
DATABASE_HOST: <file>
DATABASE: <my-db-1>
- name: <call-main-job-with-db-2>
<<: *db_common
DATABASE: <my-db-2>
ПРИМЕЧАНИЕ. Помните, что у вас может быть столько якорей, сколько вы хотите, вы можете задать два или более якорей для одного задания / задачи / ресурса и т. Д.
В Concourse есть парадигма разветвления, в которой вы хотите, чтобы работа была простой и короткой. Используйте язык сценариев, например, python или ruby, чтобы сделать создание конвейера более гибким.
Лично я использую один pipeline.yml.erb
файл, в котором я отображаю различные шаблоны работы внутри. Я стараюсь сохранить job.yml.erb
настолько общий, насколько это возможно, чтобы я мог повторно использовать их для различных конвейеров.
Чтобы перевести его на следующий уровень, вы можете указать meta config.yml и использовать этот конфиг в ваших шаблонах для генерации вашего конвейера в зависимости от того, что вы указали в конфиге.