从 GitLab-ci 中包含的模板中删除阶段

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

我有两个 gitlab 配置文件,X 和 Y。X 包含所有作业定义和阶段数组。我想从 Y 中包含 X 并删除其中一个阶段,但我收到了有关作业抱怨其阶段不可用的错误。

这是配置文件,

模板X

stages:
    - stage_a
    - stage_b

job_a:
    stage: stage_a

job_b:
    stage: stage_b

模板Y

include:
    project: ...
    file: X...

stages:
    - stage_a

我希望只运行 job_a 但出现以下错误 job_b:选择的阶段不存在;可用阶段有 .pre、stage_a、.post

如何从包含的模板中删除舞台?

gitlab gitlab-ci
2个回答
0
投票

一种解决方案是使用规则。这可能对您有帮助:https://docs.gitlab.com/ee/ci/jobs/job_control.html

另一个解决方案是重组。我的建议是:

模板X

stages:
    - stage_a
    - stage_b

job_a_template:
    script: ...

job_b_template:
    script: ...

模板Y

include:
    project: ...
    file: X...

job_a:
    extends:
        - "job_a_template"
    stage: stage_a

0
投票

您无法“删除”阶段,但可以覆盖它们。规则是“最接近的范围获胜”。在您的情况下,模板 Y 会覆盖从模板 X 导入的 stages: 关键字。这是有问题的,因为 job_b 需要

stage_b
存在,因为它定义了
stage: stage_b
。作业中定义的所有阶段都必须存在于
stages:
中。
为了避免此问题,您可以确保 
stage_b
包含在

stages:

中,或者将

stage:
job_b
更改为您在
stages:
中定义的阶段之一。
如果您不想运行作业,那么简单地不定义阶段是行不通的。您必须使用 
rules:

only:

/

except:
来阻止作业运行。
您还可以通过不在作业模板中定义
stages:
(根据

最佳实践

)并

使用输入
在模板中定义作业阶段来避免此问题,以便模板用户可以定义阶段。 # template X spec: inputs: stage_name_a: default: "stage_a" stage_name_b: default: "stage_b" ---- job_a: stage: $[[ inputs.stage_name_a ]] # ... job_b: stage: $[[ inputs.stage_name_b ]] # ... 然后像这样使用它:

stages:
  - build
  - deploy


include:
  - project: ...
    file: X...
    inputs:
      stage_a_name: build
      stage_b_name: deploy

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