我需要在当前阶段的第一个作业完成后立即从下一个阶段开始下一个作业,而不是等待当前阶段的其他作业完成。
我有 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 比同一阶段的其他工作更快结束时,它将继续进行下一阶段计划,而无需等待其他工作
needs:parallel:matrix
。
以您的情况为例:
plan:
stage: plan
needs:
- job: lint
parallel:
matrix:
- DIR: xxx
- DIR: yyy
(
plan
作业将等待 2 个 lint 作业 xxx
和 yyy
,但不会等待 zzz
。根据您想要执行的操作进行调整。)