gitlab - 在 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
会有帮助?
在拉取存储库之前添加此内容,运行程序应检查存储库是否已在缓存中。
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
推荐阅读
- android - 如何删除三星 AVD 皮肤中的侧边菜单?
- javascript - 请求失败,状态码 429 Axios
- laravel - 如何在 Eloquent 中实现两个以上参数的 IF 语句
- r - 无法在 ggplot 中添加统计信息
- python - 将列表追加到熊猫特定单元格中的列表
- reactjs - 从 componentDidMount 调度一个动作
- java - “组语句”中的 JPA 未知列别名
- video - 用于动画图表的视频编解码器 - 帧之间具有微小增量的干净图像
- angular - Angular10,未捕获的类型错误:无法读取 d3.js 中未定义的属性“文档”
- node.js - enableProof 在 passportjs OAuth 2.0 中做了什么?它是否启用pkce?