在 GitLab CI 管道中遍历环境

Iterate through environments in GitLab CI pipeline

我有一个 .gitlab-ci.yml 管道,其中有一个简单的作业需要在多个环境中 运行。类似于以下内容:

test:v1.0:
  stage: test
  environment:
    name: v1.0
  tags:
    - v1.0
  script:
    - ./run.sh $VERSION

test:v2.0:
  stage: test
  environment:
    name: v2.0
  tags:
    - v2.0
  script:
    - ./run.sh $VERSION

test:v2.5:
  stage: test
  environment:
    name: v2.5
  tags:
    - v2.5
  script:
    - ./run.sh $VERSION

GitLab 是否有任何一种通过迭代数组来创建作业的机制?类似于 Ansible's loops。这个想法是为了避免在只有环境或 运行ner 标签发生变化时一遍又一遍地复制粘贴相同的作业。我在文档中看不到任何内容,而且关于该主题的所有功能请求似乎都已关闭。是否有任何解决方法来实现相同的行为并被社区接受为最佳实践?

我从这里的其他问题中了解到,一个提议的解决方案可能是:

test:all:
  stage: test
  script:
    - Iterate here with v1.0, v2.0, v2.5, etc

这种方法的问题是只创建了一个作业,你也失去了从 GitLab 环境功能中选择 运行ners 和其他功能的能力,所以我宁愿避免这个。

可以使用最近才实现的 tags 中的变量和 parallel matrix 的使用,您可以执行以下操作:

test:
  stage: test
  script:
    - ./run.sh $VERSION
  environment:
    name: $VERSION
  tags:
    - $VERSION
  parallel:
    matrix:
      - VERSION: [v1.0, v2.0, v3.0]

这将为三个定义的版本创建一个作业,每个作业将 运行 并行。