首页 > 解决方案 > 在 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

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

标签: gitlabgitlab-cigitlab-ci-runner

解决方案


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

在拉取存储库之前添加此内容,运行程序应检查存储库是否已在缓存中。

cache:
  paths:
    - repo1/
    - repo2/

Gitlab缓存参考: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

Gitlab 子模块参考:https ://docs.gitlab.com/ce/ci/git_submodules.html


推荐阅读