15

我有以下配置为 .gitlab-ci.yml 但我在成功通过构建阶段后发现(这将创建一个名为 venv 的虚拟环境),似乎在测试阶段你会得到一个全新的环境(没有 venv 目录全部)。所以我想知道我是否应该将安装脚本放在 before_script 中,因为它会在每个阶段(构建/测试/部署)中运行。这是正确的方法吗?

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

阿达斯

4

1 回答 1

1

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

  • 正确的方式。使用文物。
  • 错误的方法。使用缓存。使用缓存键“hack”。仍然需要相同的跑步者。

所以是的,通过 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/

对于正确的运行环境,我建议将 docker 与包含 apt-get 依赖项的图像一起使用。并使用人工制品在工作之间传递工作结果。请注意,artefact 也上传到了 gitlab Web 界面并能够下载它们。因此,如果它们非常繁重,请使用小的 expire_in 时间,以便在所有工作完成后删除它们。

于 2016-12-25T11:52:13.097 回答