【问题标题】:Merging YAML Keys合并 YAML 密钥
【发布时间】:2018-07-28 05:49:28
【问题描述】:

我试图创建一个非常抽象的.yaml-configuration,可以在不同的地方重复使用。

现在看起来像这样:

.release: &release
  stage: release
  script:
    - docker tag $IMAGE_TESTING $IMAGE_RELEASE
    - docker push $IMAGE_RELEASE
  only: 
    - master
  when: manual

.amd64: &amd64
    BASE_ARCH: 'amd64'

.debalike: &debalike
    FLAVOUR: 'debalike'

release_debalike_amd64:
  <<: *release
  variables:
    << : [*amd64, *debalike]

正确解析成...

.release:
    stage: release
    script:
        - 'docker tag $IMAGE_TESTING $IMAGE_RELEASE'
        - 'docker push $IMAGE_RELEASE'
    only:
        - master
    when: manual
.amd64:
    BASE_ARCH: amd64
.debalike:
    FLAVOUR: debalike
release_debalike_amd64:
    stage: release
    script:
        - 'docker tag $IMAGE_TESTING $IMAGE_RELEASE'
        - 'docker push $IMAGE_RELEASE'
    only:
        - master
    when: manual
    variables:
        BASE_ARCH: amd64
        FLAVOUR: debalike

这是期望的行为。

但是是否可以避免在release_debalike_amd64 中使用变量标签而直接使用包含锚点?

类似的东西(不起作用):

.release: &release
  stage: release
  script:
    - docker tag $IMAGE_TESTING $IMAGE_RELEASE
    - docker push $IMAGE_RELEASE
  only: 
    - master
  when: manual

.amd64: &amd64
    variables:
        BASE_ARCH: 'amd64'

.debalike: &debalike
    variables:
        FLAVOUR: 'debalike'

release_debalike_amd64:
  <<: *release
  <<: [*amd64, *debalike]

现在,yaml 解析器会忽略 *debalike,只包含来自 *amd64 的值。

有什么方法可以做到这一点? 如果重要的话,这是一个 .gitlab-ci.yml。

【问题讨论】:

    标签: yaml gitlab-ci


    【解决方案1】:

    很遗憾没有。仅使用 YAML 锚点和别名是不可能进行深度合并的。

    GitLab EE 在 10.5 中引入了 CI 包含,在 10.8 中得到了增强,可以对 CI 作业进行深度合并。在这种特殊情况下,我认为它不会对您有所帮助,但您可以通过其他方式利用它,具体取决于您组织 CI 文件的方式。

    有关包含参数的更多信息,请参阅include

    【讨论】:

    • 感谢您的建议!作为我的 CE 用户,包含不是一个选项。看来我必须接受当前版本。
    猜你喜欢
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 2018-01-08
    • 2012-10-31
    • 2022-08-03
    • 2011-11-02
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多