如何在 gitlab 中的 git clone 后包含文件

Posted

技术标签:

【中文标题】如何在 gitlab 中的 git clone 后包含文件【英文标题】:How to include a file after git clone in gitlab 【发布时间】:2021-12-04 08:46:33 【问题描述】:

在 gitlab ci yml 文件中克隆一个 repo 后,我想从克隆的 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

现在我想在 my-project 的 file1.yml 中包含一个文件

file1.yml

include:
   local: ./my-project/template/common.yml

本地文件不存在

【问题讨论】:

【参考方案1】:

包含很简单,它们只是将您包含的文件的内容粘贴到您当前的 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 login 等

项目永远不会收到完整的工作(安全和质量工具除外) - 但必须按如下方式安排它们:

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 中的 git clone 后包含文件的主要内容,如果未能解决你的问题,请参考以下文章

gitlab配置ssh key后,还是需要输入密码,git clone http可以。

在gitlab-ci.yml中`git clone project2`?

gitlab 修改git clone地址为指定域名

gitlab 修改git clone地址为指定域名

GitHub 和 GitLab 是不是支持 git clone 的 --filter 参数?

dockerGitlabgitlab中clone项目时,IP地址是一串数字(内网Gitlab的IP地址不正确)的问题解决