简体   繁体   English

Docker 已激活 Conda Env 并准备好执行 Shell 命令的图像

[英]Docker Image with Conda Env Activated and Ready for Shell Commands

I have tried many ways through searching for a solution.通过寻找解决方案,我尝试了很多方法。

I think my problem is different.我认为我的问题是不同的。

I am wanting to have a docker image that has the environment installed and then active and ready for shell commands like: flake8, pylint, black, isort, coverage我想要一个 docker 图像,它安装了环境,然后处于活动状态并准备好执行 shell 命令,例如:flake8、pylint、black、isort、coverage

Dockerfile Dockerfile

FROM continuumio/miniconda3

# Create the environment:
COPY conda_env_unit_tests.yml .
RUN conda env create -f conda_env_unit_tests.yml
RUN echo "conda activate up-and-down-pytorch" >> ~/.bashrc

conda_env_unit_test.yml conda_env_unit_test.yml

name: up-and-down-pytorch
channels:
  - defaults
  - conda-forge
  
dependencies:
  - python=3.9
  - pytest
  - pytest-cov
  - black
  - flake8
  - isort
  - pylint

.gitlab-ci.yml (slimmed down) .gitlab-ci.yml(精简)

stages:
  - docker
  - linting
  - test

build_unit_test_docker:
  stage: docker
  tags:
    - docker
  image: docker:stable
  services:
    - docker:dind
  variables:
    IMAGE_NAME: "miniconda3-up-and-down-unit-tests"
  script:
    - cp /builds/upanddown1/mldl/up_and_down_pytorch/conda_env_unit_tests.yml /builds/upanddown1/mldl/up_and_down_pytorch/docker/unit_tests/
    - docker -D login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
    - docker -D build -t $CI_REGISTRY/upanddown1/mldl/up_and_down_pytorch/$IMAGE_NAME docker/unit_tests/
    - docker -D push $CI_REGISTRY/upanddown1/mldl/up_and_down_pytorch/$IMAGE_NAME
  rules:
    - changes:
      - docker/unit_tests/Dockerfile
      - conda_env_unit_tests.yml

unit-test:
  stage: test
  # image: continuumio/miniconda3:latest
  image: $CI_REGISTRY/upanddown1/mldl/up_and_down_pytorch/miniconda3-up-and-down-unit-tests
  script:
    # - conda env create --file conda_env.yml
    # - source activate up-and-down-pytorch
    - coverage run --source=. -m pytest --verbose
    - coverage report
    - coverage xml
  coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
  artifacts:
    reports:
      coverage_report:
        coverage_format: cobertura
        path: coverage.xml

The Docker Image gets uploaded to the gitlab registry and the unit test stage uses that image, however: Docker 图像被上传到 gitlab 注册表,单元测试阶段使用该图像,但是:

/bin/bash: line 127: coverage: command not found

(ultimate goal was to not have to create the conda environment every time I wanted to lint or run unit tests) (最终目标是每次我想进行 lint 或运行单元测试时都不必创建 conda 环境)

Figured it out today.今天想通了。 Dropped the duration from 8.5 minutes to 1:07 for the unit tests.将单元测试的持续时间从 8.5 分钟减少到 1:07。

Change was to source the environment in the unit-test job.更改是在单元测试作业中获取环境。 Didn't need to do that in the Dockerfile.不需要在 Dockerfile 中这样做。

Dockerfile Dockerfile

FROM continuumio/miniconda3

# Create the environment:
COPY conda_env_unit_tests.yml .
RUN conda env create -f conda_env_unit_tests.yml

conda_env_unit_tests.yml conda_env_unit_tests.yml

name: up-and-down-pytorch
channels:
  - defaults
  - conda-forge
  
dependencies:
  - python=3.9
  - pandas
  - pytest
  - pytest-cov
  - black
  - flake8
  - isort
  - pylint

.gitlab-ci.yml (slimmed down) .gitlab-ci.yml(精简)

stages:
  - docker
  - linting
  - test

build_unit_test_docker:
  stage: docker
  tags:
    - docker
  image: docker:stable
  services:
    - docker:dind
  variables:
    IMAGE_NAME: "miniconda3-up-and-down-unit-tests"
  script:
    - cp /builds/upanddown1/mldl/up_and_down_pytorch/conda_env_unit_tests.yml /builds/upanddown1/mldl/up_and_down_pytorch/docker/unit_tests/
    - docker -D login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
    - docker -D build -t $CI_REGISTRY/upanddown1/mldl/up_and_down_pytorch/$IMAGE_NAME docker/unit_tests/
    - docker -D push $CI_REGISTRY/upanddown1/mldl/up_and_down_pytorch/$IMAGE_NAME
  rules:
    - changes:
      - docker/unit_tests/Dockerfile
      - conda_env_unit_tests.yml

unit-test:
  stage: test
  image: $CI_REGISTRY/upanddown1/mldl/up_and_down_pytorch/miniconda3-up-and-down-unit-tests
  script:
    - source activate up-and-down-pytorch
    - coverage run --source=. -m pytest --verbose
    - coverage report
    - coverage xml
  coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
  artifacts:
    reports:
      coverage_report:
        coverage_format: cobertura
        path: coverage.xml

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM