如何在 git 实验室中 git 克隆后包含文件
How to include a file after git clone in gitlab
在 gitlab 中克隆一个 repo ci yml 文件后,我想从克隆的 repo 中访问一个文件,如下面的代码
gitlab-ci.yml文件
include:
- project: my-project
ref: mybranch
file: file1.yml
before_script:
- echo "Before script setup"
- git clone -b mybranch --single-branch my-project.git
现在在我的项目的 file1.yml 中,我想包含一个文件
file1.yml
include:
local: ./my-project/template/common.yml
提示本地文件不存在
包含很简单,它们只是将您要包含的文件的内容粘贴到您当前的 GitLab CI 文件中。
在你的情况下它看起来像:
include:
local: ./my-project/template/common.yml
before_script:
- echo "Before script setup"
- git clone -b mybranch --single-branch my-project.git
并且您的本地存储库中没有此文件。
解决方案
由于您只能包含一次文件,因此我建议不要在多个级别上使用包含。如果您有一个 file2.yml
,其中还包括 common.yml
- 而您两者都需要怎么办?这也会导致错误。我建议采用惯例路线并强制人们始终包含 common.yml
如果他们还包含模板项目中的另一个文件
如果你只谈论一个项目,你不需要有 project
、ref
和 file
这样花哨的包含结构。使用 local
指令就足够了。喜欢
include:
- local: file1.yml
文件中的包含相同。我不确定你的情况下 my-project
是什么,我假设它是同一个存储库。你不需要处理 git clone
这将由 GitLab CI 作业自动完成,所有文件都将在同一目录中可用。
模板项目
有时您想在其他项目中重用脚本,而我只是建议创建一个模板项目并像这样使用它。
include:
- project: templateproject
ref: mybranch
file:
- common.yml
- file1.yml
如果您的 common.yml 是关于触发器的,就将其称为触发器,并尝试将功能拆分到单独的文件中。我发现提供几个构建块并让项目自己组合它们是一种很好的做法 - 使用一个默认值来查看。
我们提供单独的包括:
- 触发器
- 脚本块
- 实用方法,例如docker登录等
项目永远不会收到完整的工作(安全和质量工具除外)- 但必须像这样安排它们:
include:
- project: templates
file:
- triggers.yml
- script.yml
job1:
stage: build
extends:
- .trigger # a job named like this in triggers.yml which contains rules
- .build # a job named like this in script.yml for building
job2:
stage: test
extends:
- .trigger # a job named like this in triggers.yml which contains rules
- .test # a job named like this in script.yml for building
这样,项目不仅包含一个包含,还包含有关构建的更多信息,您可以通过查看 CI 文件来想象发生了什么。几乎没有间接性,只要保持命名简单和描述性,就可以增加可读性。
在 gitlab 中克隆一个 repo ci yml 文件后,我想从克隆的 repo 中访问一个文件,如下面的代码
gitlab-ci.yml文件
include:
- project: my-project
ref: mybranch
file: file1.yml
before_script:
- echo "Before script setup"
- git clone -b mybranch --single-branch my-project.git
现在在我的项目的 file1.yml 中,我想包含一个文件
file1.yml
include:
local: ./my-project/template/common.yml
提示本地文件不存在
包含很简单,它们只是将您要包含的文件的内容粘贴到您当前的 GitLab CI 文件中。
在你的情况下它看起来像:
include:
local: ./my-project/template/common.yml
before_script:
- echo "Before script setup"
- git clone -b mybranch --single-branch my-project.git
并且您的本地存储库中没有此文件。
解决方案
由于您只能包含一次文件,因此我建议不要在多个级别上使用包含。如果您有一个 file2.yml
,其中还包括 common.yml
- 而您两者都需要怎么办?这也会导致错误。我建议采用惯例路线并强制人们始终包含 common.yml
如果他们还包含模板项目中的另一个文件
如果你只谈论一个项目,你不需要有 project
、ref
和 file
这样花哨的包含结构。使用 local
指令就足够了。喜欢
include:
- local: file1.yml
文件中的包含相同。我不确定你的情况下 my-project
是什么,我假设它是同一个存储库。你不需要处理 git clone
这将由 GitLab CI 作业自动完成,所有文件都将在同一目录中可用。
模板项目
有时您想在其他项目中重用脚本,而我只是建议创建一个模板项目并像这样使用它。
include:
- project: templateproject
ref: mybranch
file:
- common.yml
- file1.yml
如果您的 common.yml 是关于触发器的,就将其称为触发器,并尝试将功能拆分到单独的文件中。我发现提供几个构建块并让项目自己组合它们是一种很好的做法 - 使用一个默认值来查看。
我们提供单独的包括:
- 触发器
- 脚本块
- 实用方法,例如docker登录等
项目永远不会收到完整的工作(安全和质量工具除外)- 但必须像这样安排它们:
include:
- project: templates
file:
- triggers.yml
- script.yml
job1:
stage: build
extends:
- .trigger # a job named like this in triggers.yml which contains rules
- .build # a job named like this in script.yml for building
job2:
stage: test
extends:
- .trigger # a job named like this in triggers.yml which contains rules
- .test # a job named like this in script.yml for building
这样,项目不仅包含一个包含,还包含有关构建的更多信息,您可以通过查看 CI 文件来想象发生了什么。几乎没有间接性,只要保持命名简单和描述性,就可以增加可读性。