簡體   English   中英

Docker 已激活 Conda Env 並准備好執行 Shell 命令的圖像

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

通過尋找解決方案,我嘗試了很多方法。

我認為我的問題是不同的。

我想要一個 docker 圖像,它安裝了環境,然后處於活動狀態並准備好執行 shell 命令,例如:flake8、pylint、black、isort、coverage

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

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

.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

Docker 圖像被上傳到 gitlab 注冊表,單元測試階段使用該圖像,但是:

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

(最終目標是每次我想進行 lint 或運行單元測試時都不必創建 conda 環境)

今天想通了。 將單元測試的持續時間從 8.5 分鍾減少到 1:07。

更改是在單元測試作業中獲取環境。 不需要在 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

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

.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