如何在 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 如果他们还包含模板项目中的另一个文件

如果你只谈论一个项目,你不需要有 projectreffile 这样花哨的包含结构。使用 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 文件来想象发生了什么。几乎没有间接性,只要保持命名简单和描述性,就可以增加可读性。