运行 gitlab CI 作业时如何缓存 conda 环境?

aca*_*ove 6 continuous-integration gitlab conda gitlab-ci gitlab-ci.yml

我正在尝试将.gitlab-ci.yml文件添加到我的 gitlab 项目中;该文件看起来像:

image: continuumio/miniconda3:latest

before_script:
  - conda env create -f environment.yml
  - conda activate py3p10 
  - export MY_PROJECT_ROOT=$PWD
  - export PYTHONPATH+=:$PWD
tests:
  stage: test
  script:
    - pytest tests -W ignore::DeprecationWarning
Run Code Online (Sandbox Code Playgroud)

现在,environment.yml包含大约 30 个软件包,当我推送到分支时,作业似乎正在下载并安装所有软件包。这使得工作大约需要 10 分钟,而且看起来相当浪费。有没有办法告诉 gitlab 缓存 conda 环境以便重用?

从:

https://docs.gitlab.com/ee/ci/caching/#cache-python-dependencies

看来我们可以缓存,但仅限于virtualenv不 conda。从:

gitlab-ci 的缓存虚拟环境

最佳答案不鼓励使用 conda 进行缓存。

干杯。

我期望能够缓存环境,并且完整的作业应该测试大约 20 秒。

小智 2

这是我处理事情的方式。

需要注意的是,您的环境需要保存在项目目录中。这意味着您需要使用-pConda 中的选项而不是-n.

下面的示例非常模仿 Gitlab 文档中的示例。

|| true是必需的,因为据我所知,Conda 没有一个标志,如果使用时环境存在,该标志将跳过安装-p

default:
  image: condaforge/miniforge-pypy3
  cache:
    key:
      files:
        - environment.yml
    paths:
      - .env/
  before_script:
    - conda env create -f environment.yml -p .env/ || true
    - shopt -s expand_aliases
    - alias envrun="conda run -p .env/"
    - envrun python -V

pytest:
  stage: test
  script:
    - envrun python -m pytest --junitxml=report.xml
  artifacts:
    when: always
    reports:
      junit: report.xml
Run Code Online (Sandbox Code Playgroud)