如何在 Gitlab CI 中重用共享 yml 文件中的 before_script ?

B. *_*ith 15 gitlab gitlab-ci

我知道您可以使用 yaml 锚点在 before 脚本中重用代码块:

.something_before: &something_before
- echo 'something before'   


before_script:
  - *something_before
  - echo "Another script step"
Run Code Online (Sandbox Code Playgroud)

.yml但是当 .something_before通过.something_before 在共享文件中声明时,这似乎不起作用include:file。它似乎也不extends适用于before_script. 有谁知道如何重用before_script共享.yml文件中的某些步骤?

编辑:我的用例是我有 2 个 gitlab 项目,它们的 before_script 步骤几乎相同。我不想在发生更改时都必须更改这两个项目,因此我有第三个单独的 Gitlab 项目,其中包含一个 .yml 模板,我通过 include:file 将其包含在两个项目中。我想将所有通用代码放入该共享模板中,并且对于具有两个额外步骤的 git 项目,只有两行 before_script 。

dan*_*elz 15

Yaml 锚点不适用于包含的文件。您需要使用extends关键字。但是您想要实现的目标将无法使用,before_script因为模板中的代码将在使用该模板的作业中被覆盖(如果也有)before_script

在你的特定工作中你真的需要 before_script 还是你可以用普通的来实现相同的目的script?如果是,你可以这样做:

模板文件:

.something_before:
  before_script:
    - echo 'something before'
    - echo 'something more before' 
Run Code Online (Sandbox Code Playgroud)

项目管道:

include:
  - project: 'my-group/my-project'
    file: '/something_before.yml'

stages:
  - something

something:
  stage: something
  extends: .something_before
  script:
    - echo 'additional stuff to do'
Run Code Online (Sandbox Code Playgroud)

您的before_script部分将合并到某些作业中并在该script部分之前执行。


sey*_*yed 11

您可以使用该!reference标签。

.something:
  before_script:
    - echo 'something before'   


before_script:
  - !reference [".something", "before_script"]
  - echo "Another script step"
Run Code Online (Sandbox Code Playgroud)