构建后的测试将 运行 在 gitlab-ci 的新环境中

test after build would run in new environment on gitlab-ci

我有以下配置作为.gitlab-ci.yml 但我在成功通过构建阶段后发现( 会创建一个名为 venv 的 virtualenv),似乎 在测试阶段你会得到一个全新的环境(有 根本没有 venv 目录)。所以我想知道我是否应该设置 before_script 中的脚本因此在每个阶段 (build/test/deploy) 中会 运行。这是正确的做法吗?

before_script:
  - uname -r 

types:
  - build
  - test
  - deploy

job_install:
  type: build
  script:
    - apt-get update
    - apt-get install -y libncurses5-dev
    - apt-get install -y libxml2-dev libxslt1-dev
    - apt-get install -y python-dev libffi-dev libssl-dev 
    - apt-get install -y python-virtualenv
    - apt-get install -y python-pip
    - virtualenv --no-site-packages venv
    - source venv/bin/activate
    - pip install -q -r requirements.txt
    - ls -al
  only:
    - master

job_test:
  type: test
  script:
    - ls -al
    - source venv/bin/activate
    - cp crawler/settings.sample.py crawler/settings.py
    - cd crawler 
    - py.test -s -v 
  only:
    - master

adasd

Gitlab CI 工作应该是独立的,因为它们可以 运行 在不同的 运行 人身上。这不是问题。阶段间传递文件的方式有两种:

  • 正确的方法。使用人工制品。
  • 走错路了。使用缓存。使用缓存键 "hack"。仍然需要相同的 运行ner.

所以是的,按照 gitlab 的方式,你的工作所依赖的一切都应该在脚本之前。

工件示例:

  artifacts:
   when: on_success
   expire_in: 1 mos
   paths:
    - some_project_files/

缓存示例:

cache:
  key: "$CI_BUILD_REF_NAME"
  untracked: true
  paths:
   - node_modules/
   - src/bower_components/

为了正确的 运行ning 环境,我建议使用 docker 和包含 apt-get 依赖项的图像。并使用人工制品在作业之间传递作业结果。请注意,人工制品也上传到 gitlab 网络界面并能够下载它们。因此,如果它们很重,请使用少量 expire_in 时间,以便在完成所有工作后将它们移除。