python-3.x - Gitlab:Docker 中的 Docker?
问题描述
我有一个在 Gitlab 中运行的 CI/CD 管道。管道配置文件的前几行.gitlab-ci.yml
如下所示:
# jobs can use following stages
stages:
- lint
- build
- test
- deliver
- publish
image: python:3.7
该声明告诉我所有 CI/CD 测试都将在基于python:3.7
映像的容器中运行。
我的软件包含一组数据处理模块,每个模块都附带一组使用 pytest 的测试。挑战在于,每个数据处理模块使用的库可能差异很大,并且可能经常变化。这意味着每次有人提交需要新库的数据处理模块的新版本时,我们必须编辑 .gitlab-ci.yml 文件以添加类似第 3 行(带pip install
)的语句:
script:
- python3 -m pip install --user --upgrade pip setuptools twine
- python3 -m pytest -sv --cov=. --cov-report=html tests/
pip install
随着时间的推移,每次需要新库或需要新的库版本时,都必须编辑或添加更多行。
不用说,这增加了 DevOps 的负担,以确保 CI/CD 配置是最新的。此外,很难弄清楚捆绑所有数据处理软件的生产容器所需的配置。
我想的一种解决方案是,每个数据处理模块都必须在模块设计者设计的 Docker 容器中进行测试,并且图像名称将是 DEVELOPERS_DOCKER_IMAGE。然后 Gitlab CI/CD 脚本中的 pytest 命令将类似于:
script:
- docker run --name=pytest_container -it --rm DEVELOPERS_DOCKER_IMAGE python3 -m pytest -sv --cov=. --cov-report=html tests/
(使用额外的 Docker 挂载来存储代码覆盖率结果)。
DEVELOPERS_DOCKER_IMAGE
但是,这需要从另一个 Docker 容器(在本例中是基于映像的 CI/CD 容器)中启动一个 Docker 容器(在本例中基于 Docker 映像python:3.7
)。
问题:
- 这可能吗?
- 推荐还是不鼓励这种方法?
- 是否有其他更好或更符合 Docker 习惯用法和/或最佳实践的解决方案?
我很感激我能得到的任何帮助。
解决方案
推荐阅读
- python-3.x - ImportError:Jupyter 笔记本中没有名为“IPython.core.profiledir”的模块
- python-3.x - 如何在 Windows 10 上为 tensorflow 安装 tensorRT 的轮包?
- php - 未定义变量:gejala(代码点火器)
- xml - XSL:将未知数量的子节点转换为 CSV
- php - Visual Studio 2017 Movierental 日期设置
- azure - Azure 帐户的 root 所有者问题(不知何故被修改,我无权访问)。我该如何清理?
- html - 如何强制弹性项目到页面底部?
- vue.js - 如何在 vuelidate 中添加基于条件的 url 验证
- android - 如何更改Android Material TextInputLayout组件的非活动边框笔触颜色
- powershell - 使用 Add-PnPClientSideWebPart 添加天气 WebPart 未设置位置