GitLab 避免每个环境重复作业

问题描述 投票:0回答:1

我有以下 GitLab CI:

stages:
  - firstStage
  - secondStage

-first-job:
  stage: firstStage
  parallel:
    matrix:
      - ENVIRONMENT: 
        - test
        - production
  environment: $ENVIRONMENT
  script:
    - echo "firstStage $ENVIRONMENT"
  when: manual
  allow_failure: false

-second-job:
  stage: secondStage
  parallel:
    matrix:
      - ENVIRONMENT: 
        - test
        - production
  environment: $ENVIRONMENT
  script:
    - echo "secondStage $ENVIRONMENT"
  when: manual
  allow_failure: false

我的问题是我想仅为“测试”环境执行所有作业。但现在,如果我不为所有环境(测试/生产)执行“第一项作业”,我就无法为任何环境执行第二项作业。

我知道我可以:

  • 重复作业
  • 移除并行矩阵并将环境作为变量
  • 甚至将allow_failure更改为true,这将允许我执行下一阶段

但我想知道是否有一种更干净的方法来预先配置环境并仅执行其中一个环境的管道..

gitlab gitlab-ci environment
1个回答
0
投票

在维护并行矩阵的同时,您可以考虑使用

rules
关键字 来控制作业执行。为此,请使用自定义脚本设置一个环境变量,然后可以在
rules
条件下使用该环境变量。

[Updated GitLab CI Pipeline]
        |  
     setup
        |
   firstStage
    /      \
test    production
    |        | (via rules)
secondStage secondStage

那就是:

stages:
  - setup
  - firstStage
  - secondStage

setup-job:
  stage: setup
  script:
    - export SELECTED_ENVIRONMENT=test
  artifacts:
    reports:
      dotenv: environment_variables

first-job:
  stage: firstStage
  parallel:
    matrix:
      - ENVIRONMENT: 
        - test
        - production
  script:
    - echo "firstStage $ENVIRONMENT"
  environment: 
    name: $ENVIRONMENT
  rules:
    - exists:
        variables: $SELECTED_ENVIRONMENT == $ENVIRONMENT
  when: manual
  allow_failure: false

second-job:
  stage: secondStage
  parallel:
    matrix:
      - ENVIRONMENT: 
        - test
        - production
  script:
    - echo "secondStage $ENVIRONMENT"
  environment:
    name: $ENVIRONMENT
  rules:
    - exists:
        variables: $SELECTED_ENVIRONMENT == $ENVIRONMENT
  when: manual
  allow_failure: false
  needs:
    - first-job

带有

setup
的附加
setup-job
阶段会导出值为
SELECTED_ENVIRONMENT
test
变量。
dotenv
中的 artifacts:reports
 工件 (
setup-job
) 捕获导出的 
SELECTED_ENVIRONMENT
变量,以便可以在后续阶段使用。

first-job
second-job
中,
rules
关键字与
exists
指令一起使用,以检查
SELECTED_ENVIRONMENT
变量是否与每个作业的
ENVIRONMENT
变量匹配。这将确保
firstStage
secondStage
中的作业仅在
test
环境中运行,根据
SELECTED_ENVIRONMENT
中设置的
setup-job
值。
needs
中的
second-job
关键字确保它在执行之前等待
first-job
成功完成。

© www.soinside.com 2019 - 2024. All rights reserved.