Конкурсный вызов из другой работы с параметрами

У меня есть работа со многими задачами, как это:

- 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 и использовать этот конфиг в ваших шаблонах для генерации вашего конвейера в зависимости от того, что вы указали в конфиге.

Другие вопросы по тегам