【问题标题】:How do you reuse a before_script from a shared yml file in Gitlab CI?您如何在 Gitlab CI 中重用共享 yml 文件中的 before_script?
【发布时间】:2020-09-04 14:46:19
【问题描述】:

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

.something_before: &something_before
- echo 'something before'   


before_script:
  - *something_before
  - echo "Another script step"

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

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

【问题讨论】:

    标签: gitlab gitlab-ci


    【解决方案1】:

    看看GitLab 13.6(2020 年 11 月)是否让事情变得更容易:

    包含多个 CI/CD 配置文件作为列表

    以前,当使用 include:file 语法将多个文件添加到 CI/CD 配置时,您必须为每个文件指定项目和引用。在此版本中,您现在可以一次性指定项目、引用和提供文件列表。这可以防止您重复自己,并使您的管道配置不那么冗长。

    Documentation) 和Issue

    【讨论】:

      【解决方案2】:

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

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

      模板文件:

      .something_before:
        before_script:
          - echo 'something before'
          - echo 'something more before' 
      

      项目管道:

      include:
        - project: 'my-group/my-project'
          file: '/something_before.yml'
      
      stages:
        - something
      
      something:
        stage: something
        extends: .something_before
        script:
          - echo 'additional stuff to do'
      

      并且您的 before_script 部分将合并到 something 作业中并在 script 部分之前执行。

      【讨论】:

        【解决方案3】:

        您可以毫无问题地使用扩展,但您需要覆盖整个 before_script 块。

        如果您只想更改 before_script 的一部分,请使用 shell 脚本来完成

        在模板中设置 if 条件

        before_script
          - | 
            if [ condition ]
            then
              commands here
            fi
        

        编辑后:您可以使用变量来实现它

        项目一:VAR = command 1

        项目2:VAR = command 2

        您可以在 gitlab-ci.yml 文件或每个项目的 CI/CD 设置中设置 env var 的内容!

        【讨论】:

        • 我已编辑我的帖子以包含更多相关信息。在我的情况下,我是否将您的代码放在共享模板中,“条件”是具有额外步骤的项目的名称?
        • 是的!现在我提出了另一种方法......使用变量
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-15
        • 2017-08-27
        • 2021-08-02
        • 1970-01-01
        • 2022-01-19
        • 2021-11-06
        相关资源
        最近更新 更多