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

Pav*_*otk 4 concourse

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

- 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>
Run Code Online (Sandbox Code Playgroud)

我的问题是,我必须从字面上调用相同的工作,但不是 DATABASE params 是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>
Run Code Online (Sandbox Code Playgroud)

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

Rol*_*olo 6

请记住您使用的是 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
Run Code Online (Sandbox Code Playgroud)

为您的大厅管道试试这个:

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>
Run Code Online (Sandbox Code Playgroud)

注意:请记住,您可以拥有任意数量的锚点,您可以为同一个作业/任务/资源等定义两个或多个锚点。


Jos*_*abi 1

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