来自另一个带有参数的作业的大厅调用作业

Concourse call job from another job with parameters

我的工作有很多这样的任务:

- 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>

我的问题是,我必须按字面意思调用同一个作业,但我希望它不是 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>

我不确定这是否可行,因为我没有找到任何这样的例子。

您只需像在问题描述中那样复制并粘贴任务即可。 Concourse 需要一个富有表现力的 yaml,不允许有分支或逻辑。如果您不想复制和粘贴那么多的 yaml,那么您可以做一些 yaml 生成魔术来简化您查看和使用的内容,但是大厅会需要完整的 yaml 以及单独定义的每个作业。

Concourse 有这种扇入扇出范例,您希望在其中保持作业简单和简短。使用脚本语言,例如喜欢 python 或 ruby 让您的管道创建更灵活。

我个人使用一个 pipeline.yml.erb 文件,在其中呈现不同的作业模板。我尽量让我的 job.yml.erb 尽可能通用,这样我就可以将它们重复用于不同的管道。

要将其提升到一个新的水平,您可以指定一个元 config.yml 并在您的模板中使用此配置以根据您在配置中指定的内容生成您的管道。

请记住您使用的是 YAML,因此您可以使用 "Anchors"

等 YAML 功能

您将在这个 link 中找到一些关于 "Anchors" 的附加信息。寻找 "EXTRA YAML FEATURES"

YAML also has a handy feature called 'anchors', which let you easily duplicate content across your document. Both of these keys will have the same value: anchored_content: &anchor_name This string will appear as the value of two keys. 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 管道试试这个:

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>

注意:请记住,您可以根据需要拥有任意多个锚点,您可以为相同的锚点定义两个或多个锚点Job/Task/Resource,等等