代码之家  ›  专栏  ›  技术社区  ›  Jay Godse

Gitlab:Docker中的Docker?

  •  0
  • Jay Godse  · 技术社区  · 3 年前

    我有一个在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安装 每次需要新库或需要新库版本时,都必须编辑或添加行。

    不用说,这增加了DevOps的负担,以确保CI/CD配置是最新的。此外,这使得很难计算出捆绑所有数据处理软件的生产容器所需的配置。

    我设想的一个解决方案是,每个数据处理模块都必须在模块设计者设计的Docker容器中进行测试,并且图像名称为,例如,DEVELOERS_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装载以存储代码覆盖率结果)。

    然而,这将需要旋转一个Docker容器(在本例中基于Docker映像 DEVELOPERS_DOCKER_IMAGE ),来自另一个Docker容器(在本例中是基于 python:3.7 形象

    问题:

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

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

    0 回复  |  直到 3 年前