是否有可能在 YAML 中实现这样的重构

Is it possible to achieve such a refactor in YAML

我正在开发一个大厅管道,我需要在我的 YAML 中复制大量代码,所以我正在尝试重构它,以便它易于维护,而且我最终不会得到数千个重复 lines/blocks.

我已经实现了以下 yaml 文件,这似乎是可行的方法,但它并不能满足我的所有需求。

add-rotm-points: &add-rotm-points
  task: add-rotm-points
  config:
    platform: linux
    image_resource:
      type: docker-image
      source:
        repository: ((registre))/polygone/concourse/cf-cli-python3
        tag: 0.0.1
        insecure_registries: [ ((registre)) ]
    run:
      path: source-pipeline/commun/rotm/trigger-rotm.sh
      args: [ "source-pipeline", "source-code-x" ]
    inputs:
      - name: source-pipeline
      - name: source-code-x

jobs:
  - name: test-a
    plan:
      - in_parallel:
          - get: source-pipeline
          - get: source-code-a
            trigger: true
      - <<: *add-rotm-points
  - name: test-b
    plan:
      - in_parallel:
          - get: source-pipeline
          - get: source-code-b
            trigger: true
      - <<: *add-rotm-points

我的问题是我的两个作业都使用顶部定义的通用任务。但是在一般任务中,我需要将 source-code-x 更改为我在工作中使用的 -a 或 -b 版本。

如果不在每项工作中重复我的锚,我找不到实现这一目标的方法,这似乎适得其反。但我可能没有完全理解 yaml anchors/merges.

您需要做的就是将输入映射到各个任务,如下所示:

add-rotm-points: &add-rotm-points
  task: add-rotm-points
  config:
    platform: linux
    image_resource:
      type: docker-image
      source:
        repository: ((registre))/polygone/concourse/cf-cli-python3
        tag: 0.0.1
        insecure_registries: [ ((registre)) ]
    run:
      path: source-pipeline/commun/rotm/trigger-rotm.sh
      args: [ "source-pipeline", "source-code-x" ]
    inputs:
      - name: source-pipeline
      - name: source-code-x

jobs:
  - name: test-a
    plan:
      - in_parallel:
          - get: source-pipeline
          - get: source-code-a
            trigger: true
      - <<: *add-rotm-points
        input_mapping:
          source-code-x: source-code-a
  - name: test-b
    plan:
      - in_parallel:
          - get: source-pipeline
          - get: source-code-b
            trigger: true
      - <<: *add-rotm-points
        input_mapping:
          source-code-x: source-code-b