如何在Gitlab CI中重用共享yml文件中的before_脚本?
我知道您可以使用yaml锚点重用before脚本中的代码块:如何在Gitlab CI中重用共享yml文件中的before_脚本?,gitlab,gitlab-ci,Gitlab,Gitlab Ci,我知道您可以使用yaml锚点重用before脚本中的代码块: .something_before: &something_before - echo 'something before' before_script: - *something_before - echo "Another script step" 但是,如果通过include:file在共享的.yml文件中声明.something\u,则这似乎不起作用。似乎extends也不适用于before\u s
.something_before: &something_before
- echo 'something before'
before_script:
- *something_before
- echo "Another script step"
但是,如果通过include:file
在共享的.yml
文件中声明.something\u,则这似乎不起作用。似乎extends
也不适用于before\u script
。有人知道如何从共享的.yml
文件中重用之前脚本中的某些步骤吗
编辑:我的用例是我有两个gitlab项目,它们的before_脚本步骤几乎相同。我不想在发生更改时同时更改这两个项目,所以我有第三个独立的Gitlab项目,它有一个.yml模板,我通过include:file将其包含在两个项目中。我想把所有的公共代码放在共享模板中,在git项目的脚本前面有两行代码,它有两个额外的步骤。您可以毫无问题地使用extends,但是您需要在脚本之前覆盖整个
块
如果只想更改before_脚本的一部分,请使用shell脚本
在模板内部设置if条件
before_script
- |
if [ condition ]
then
commands here
fi
编辑后:您可以使用变量来实现它
项目1:VAR=命令1
项目2:VAR=command 2
您可以在gitlab-ci.yml文件或每个项目的ci/CD设置上设置env var的内容 Yaml锚不适用于包含的文件。您需要使用extends
关键字。但是,如果在脚本之前有一个,那么模板中的代码将在使用模板的作业中被覆盖,因此您想要实现的目标将无法在脚本之前使用
在你的具体工作中,你真的需要一个赛前脚本吗?或者你能用一个普通的脚本实现同样的效果吗?如果是,您可以这样做:
模板文件:
.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
部分之前执行。看看(2020年11月)是否会让它变得更简单:
包括多个CI/CD配置文件作为列表
以前,使用include:file
语法将多个文件添加到CI/CD配置时,必须为每个文件指定项目和引用。在这个版本中,您现在可以同时指定项目、ref和提供文件列表。这可以防止您重复自己的操作,并减少管道配置的冗长
见)和
我已经编辑了我的帖子以包含更多相关信息。在我的例子中,我会将您的代码放在共享模板中,而“条件”是包含额外步骤的项目的名称吗?是的!现在我提出了另一种方法。。。带变量