Gitlab CI/CD 设置 Python 虚拟环境的最佳实践是什么

LuG*_*Nat 8 python continuous-integration gitlab gitlab-ci

问题

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

我真的不知道在哪里放置虚拟环境的设置和requirements.txt.

我的主要资源是GitlabPython.gitlab-ci.yml模板

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

before_script:
  - python -V  # Print out python version for debugging
  - pip install virtualenv
  - virtualenv venv
  - source venv/bin/activate
Run Code Online (Sandbox Code Playgroud)

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

cache:
  paths:
    - .cache/pip
    - venv/
Run Code Online (Sandbox Code Playgroud)

我想在我的脚本中执行相同的操作,并另外从requirements.txt我的存储库中安装。之后,我想执行代码分析(pylint,flake8)并在不同阶段进行测试。如果我附加pip install -r requirements.txtbefore_script,它会在每个作业中执行,这会产生不必要的日志。

问题

这不是更有意义吗

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

您将在哪里创建 venv 并安装您的需求?

小智 5

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

  1. 创建一个 Dockerfile。这是在pip install -r requirements创建 docker 镜像时执行的地方,不同的 Runners 将在每个不同的阶段使用该镜像
  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

Run Code Online (Sandbox Code Playgroud)

下面的.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 "
Run Code Online (Sandbox Code Playgroud)