【问题标题】:What is best practice in Gitlab CI/CD for setup of a Python virtual environmentGitlab CI/CD 中设置 Python 虚拟环境的最佳实践是什么
【发布时间】:2021-10-26 16:07:01
【问题描述】:

问题

现在我正在为一个托管在 Gitlab 上的 Python 项目写一个 .gitlab-ci.yml

我真的不知道把虚拟环境的设置和安装要求从requirements.txt放到哪里。

我的主要资源是Gitlab Python.gitlab-ci.yml template

在那里,virtualenv 会在每个作业之前安装,使用 before_script 关键字并创建一个名为 'venv' 的 virtualenv:

before_script:
  - python -V  # Print out python version for debugging
  - pip install virtualenv
  - virtualenv venv
  - source venv/bin/activate

此外,设置了“venv”的缓存:

cache:
  paths:
    - .cache/pip
    - venv/

我想在我的脚本中做同样的事情,另外从我的仓库中的requirements.txt 安装。之后,我想在不同阶段执行代码分析(pylint,flake8)和测试。如果我将pip install -r requirements.txt 附加到before_script,它会在每个作业中执行,这会产生不必要的日志。

问题

这样做不是更有意义

  1. 定义缓存的子目录。 (如上所示)
  2. 只能在before_script 中调用source venv/bin/activate
  3. 为设置添加一个阶段或作业,调用virtualenv venv 以生成环境一次。这项工作也调用pip install -r requirements.txt一次

你会在哪里创建你的 venv 并安装你的需求?

【问题讨论】:

  • 如果 python 包在 docker 容器中运行,则可以绕过 virtualenv,将容器视为虚拟环境。

标签: python gitlab continuous-integration gitlab-ci


【解决方案1】:

对于一些托管在 Gitlab 中的 python 项目,我遵循的过程是:

  1. 创建一个 Dockerfile。这里是 pip install -r requirements 在创建不同 Runner 将在每个不同阶段使用的 docker 映像时执行的位置
  2. 在管道的每个其他阶段拉取在步骤 1 中创建的 Docker 映像可确保您只运行一次 pip install -r requirements.txt 可能在您可能调用 build 的阶段

例子:

Dockerfile

FROM rasa/rasa-sdk:latest
MAINTAINER William Galindez Arias
COPY ./actions /app/actions/
COPY  ./requirements.txt /app/requirements.txt
EXPOSE 8000
WORKDIR /app
USER root
RUN pip install -r requirements.txt
USER 1001
ENTRYPOINT [""] 
CMD python -m rasa_sdk --actions actions -vv

下面的.gitlab-ci.yml文件第一步使用上面的docker文件构建Docker镜像,然后推送到其他阶段

stages:
   - build 
   - test

build-image:
 stage: build
 script:
   - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
   - docker build -t $ACTIONS_CONTAINER_IMAGE -f Dockerfile .
   - docker push $ACTIONS_CONTAINER_IMAGE
 tags:
    - docker

test-action:
   stage: test
   image: $ACTIONS_CONTAINER_IMAGE
   script:
       - echo "testing  sdk "

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2013-12-28
    • 2019-08-07
    相关资源
    最近更新 更多