在 Gitlab 的作业之间共享不同的存储库 CI

Sharing different repositories between jobs for Gitlab CI

在我们的项目中,我们有许多存储库,它们都是构建几个不同的 docker 容器所必需的。

所有容器的 Dockerfile 都位于一个存储库中。

我希望能够在构建容器之前提取构建所需的所有存储库。这将避免多次拉取存储库,其中一些可能需要将近一分钟的时间。

基本上我想做的是:

stages:
  - initialize
  - build

repo1 pull:
  stage: initialize
  script:
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.instance/group/repo1.git

repo2 pull:
  stage: initialize
  script:
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.instance/group/repo2.git

image1:
  stage: build
  script:
      - cp repo1/ image1/
      - cd image1
      - docker build -t image1 --network=host .
      - docker login -u gitlab-runner -p gitlab docker.registry
      - docker push docker.registry/image1:latest

image2:
  stage: build
  script:
      - cp repo2/ image2/
      - cd image2
      - docker build -t image2 --network=host .
      - docker login -u gitlab-runner -p gitlab docker.registry
      - docker push docker.registry/image2:latest

在各个阶段共享存储库同时仍允许在阶段内进行并行构建的最佳方式是什么?

我还在学习 Gitlab-ci 但也许 cache 会有帮助?

在拉取 repos 之前添加这个,运行器应该检查 repo 是否已经在缓存中。

cache:
  paths:
    - repo1/
    - repo2/

Git实验室缓存参考:https://docs.gitlab.com/ee/ci/caching/

编辑:
或者使用 Git 子模块作为依赖库是个好主意吗? 然后可以将运行器配置为将这些子模块提取到工作区,您应该可以在整个 ci 作业中访问它们。

您需要添加一个如下所示的 .gitmodules 文件:

[submodule "repo1"]
  path = repo1
  url = ../repo1.git
[submodule "repo2"]
  path = repo2
  url = ../repo2.git

然后在你的.gitlab-ci.yml

 variables:
   GIT_SUBMODULE_STRATEGY: normal

Git实验室子模块参考:https://docs.gitlab.com/ce/ci/git_submodules.html