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

问题:

  1. 这可能吗?
  2. 推荐还是不鼓励这种方法?
  3. 是否有其他更好或更符合 Docker 习惯用法和/或最佳实践的解决方案?

我很感激我能得到的任何帮助。

标签: python-3.xdockergitlab-cidocker-in-docker

解决方案


推荐阅读