如何通过并行矩阵动态使用 GitLab CI 需求?

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

我需要在当前阶段的第一个作业完成后立即从下一个阶段开始下一个作业,而不是等待当前阶段的其他作业完成。

我有 gitlab CI 阶段

stages:
  - lint
  - plan
  - apply

有矩阵

.terraform_path: &terraform_path
  - DIR:
      - "xxx"
      - "yyy"
      - "zzz"

第一阶段 lint 创建 3 个作业,每个作业来自并行矩阵

lint:
  stage: lint
  parallel:
    matrix: *terraform_path
  script:
    - |
      terraform fmt -check -recursive -diff
      cd $DIR
      terraform init
      terraform validate
  artifacts:
    expire_in: 1 hour
    paths:
      - $DIR/.terraform

接下来,计划

plan:
  stage: plan
  parallel:
    matrix: *terraform_path
  script:
    - |
      cd $DIR
      terraform init
      terraform plan -out=$PLAN -parallelism=30
      terraform show --json $PLAN | convert_report > $PLAN_JSON
  rules:
    - *run_if_no_lock
  artifacts:
    paths:
      - $DIR/$PLAN
    reports:
      terraform: $DIR/$PLAN_JSON
  resource_group: $DIR

然后我尝试添加

needs

plan:
  stage: plan
  needs:
    - job: lint-xxx
    - job: lint-yyy
    - job: lint-zzz

但这不起作用。如果我使用它也不起作用:

plan:
  stage: plan
  needs:
    - job: lint

或者

plan:
  stage: plan
  needs:
    - job: lint-$DIR

它不认识它。

所以我预计当第一阶段的 lint-xxx 比同一阶段的其他工作更快结束时,它将继续进行下一阶段计划,而无需等待其他工作

gitlab-ci
1个回答
0
投票

您需要使用

needs:parallel:matrix

以您的情况为例:

plan:
  stage: plan
  needs:
    - job: lint
      parallel:
        matrix:
          - DIR: xxx
          - DIR: yyy

plan
作业将等待 2 个 lint 作业
xxx
yyy
,但不会等待
zzz
。根据您想要执行的操作进行调整。)

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