在作业之间共享安装要求

时间:2018-11-28 15:48:22

标签: pip continuous-integration gitlab-ci

我有以下具有3个不同作业的 yml 配置文件:

stages:
  - build
  - test
  - analyze

build:
  stage: build
  script:
    - apt-get update -qy
    - apt-get install -y python3-dev python3-pip
    - pip3 install -r requirements.txt

test:
  stage: test
  script:
    - coverage run --source='.' manage.py test
  cache:
    paths:
      - .coverage

analyze:
  stage: analyze
  script:
    - flake8
    - coverage report

在第一份工作中,我安装了需求,其中包括 coverage flake8 。但是这些工具在以下作业中使用。我曾尝试使用“依赖关系”或“缓存”,但没有用:只能共享项目根目录下的文件/目录,不能共享/ user / local / bin下的二进制文件。

我试图指示 pip install 的另一个目录,但是二进制文件安装在/ user / local / bin中。

我发现的解决方法是在每个作业中安装依赖项,但是我认为这不是最理想的解决方案。

我认为必须为此提供更好的解决方案。

谢谢。

1 个答案:

答案 0 :(得分:0)

我刚刚找到了解决方案,至少对于 python3 (对我来说足够了):

python3 有一个用于管理虚拟环境的内置工具: venv

使用 venv ,我们可以在项目根目录中创建虚拟环境,并缓存该目录,并在每个作业中启用虚拟环境。

variables:
  VENV_NAME: "env"

cache:
  paths:
    - $VENV_NAME

first_job:
  script:
    - apt-get update -qy
    - apt-get install -y python3-dev python3-pip python3-venv
    - python3 -m venv $VENV_NAME
    - source $VENV_NAME/bin/activate
    - pip3 install -r requirements.txt

next_jobs:
  script:
    - source $VENV_NAME/bin/activate
    - echo "hello world!"

PD:不要忘记从覆盖率或其他分析工具中排除虚拟环境目录