在 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
在我们的项目中,我们有许多存储库,它们都是构建几个不同的 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