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

- 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-2而不是DATABASE参数是my-db-1

我能够做到这一点的唯一方法是进行新工作并传递参数,从字面上复制整个行集。 我的工作太胖了,因为其中有太多任务,因此尽管复制它是显而易见的解决方案,但我想知道是否有一种方法可以重用,因为有多个管道和一个主管道本质上调用了这些管道, 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>

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

#1楼 票数:3

请记住,您使用的是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管道上尝试以下操作:

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>

注意:请记住,您可以根据需要拥有任意多个锚,可以为同一作业/任务/资源定义两个或多个锚,等等。

#2楼 票数:1 已采纳

您只需要像在问题描述中一样复制和粘贴任务。 Concourse期望有表达力的Yaml,不允许分支或逻辑。 如果您不想复制和粘贴太多Yaml,则可以做一些Yaml生成魔术来简化您的外观和使用方式,但是Concourse希望完整的Yaml与每个作业分开定义。

#3楼 票数:0

Concourse具有这种扇入扇出范式,您想在其中保持工作简单而简短。 使用脚本语言,例如python或ruby,可以使您的管道创建更加灵活。

我个人使用一个pipeline.yml.erb文件在其中渲染不同的作业模板。 我尝试使我的job.yml.erb尽可能通用,以便可以将它们重用于不同的管道。

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

  ask by Pavanraotk translate from so

未解决问题?本站智能推荐:

3回复

在大厅作业/任务之间传递参数

在大厅任务和工作之间传递参数的最佳方法是什么? 例如; 如果我的第一个任务生成一个唯一的ID,将ID传递给下一个工作或任务的最佳方法是什么?
1回复

concourseci作业参数化

我想为不同的环境参数化工作。 例如: 2个问题: 我如何为这份工作创建模板。 例如,现在我有工作terraform plan prod ,我想为具有不同环境的不同工作提供 1 个模板。 terraform plan * (prod/ppe/qa/dev) 如何使用文件管理变量? 我可以使用v
1回复

将构建目录(/dist)从一个作业传递到concourse中的下一个作业

我知道这样做并不容易,并试图探索许多方法,但要么我无法正确理解它,要么对我不起作用。 我有一个运行 angular build (ng build) 并创建 /dist 文件夹的大厅作业。 这很好用。 构建.yml 编译文件 我已经提到输出是我存储 dist 内容的工件。 但是当我尝试在下一份工作中
2回复

我们可以通过HTTP请求触发大厅作业吗?

我想配置我的 slack 传出 webhook,以便它可以通过 http 触发大厅作业。 有没有一种方法可以通过 http 请求触发大厅作业,而不是从 Web UI 手动单击作业?
1回复

在作业之间传递容器

我最有可能以错误的方式看待事物,但是在使用场所设置我们的CI管道的同时,我有一个想法可以尝试并行运行我们的单元测试,JS单元测试和e2e测试,这使我考虑将它们全部作为单独的工作。 这意味着尽管首先需要运行一个初始作业以安装所有依赖项,以准备随后的3个作业,然后才能运行测试。 我认为我真的应
2回复

场所:放置步骤期间无法访问作业资源

我正在尝试创建作业并使用build参数推送包含我的应用程序依赖项的docker映像。 在concourse文档中,它指出在放置步骤期间,可以通过get获取所有资源。 我似乎无法访问我的git资源,以便从中提取pom.xml文件。 当我尝试运行此作业时,收到错误消息pom.xml文件不存在。
1回复

大厅:如何将作业的输出传递给不同的作业

从文档中我不清楚是否有可能将一个作业的输出传递给另一个作业(不是从任务到任务,而是从一个工作到另一个工作)。 我不知道从概念上讲我是做正确的事情,也许它应该在Concourse中以不同的方式建模,但我想要实现的是将Java项目的管道分成几个细粒度的工作,这些工作可以并行执行,如果我需要重新运
1回复

单个管道内的ConcourseCI作业并发

我有一个相当简单的 terraform 部署管道,有 4 个工作。 其中 2 个分别对UAT和master分支的提交运行terraform apply 。 其中 2 个在针对这些分支的 PR 上运行terraform plan 。 有没有办法将作业组配置为串行运行? 我知道我可以强制执行单个作业的串