我有以下配置为.gitlab-ci.yml,但我在成功传递构建阶段后发现(这将创建一个名为venv的virtualenv),似乎在测试阶段你会得到一个全新的环境(没有venv目录在所有) . 所以我想我应该将setup脚本放在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
1 回答
Gitlab CI工作应该是独立的,因为它们可以在不同的跑步者身上运行 . 这不是问题 . 有两种方法可以在阶段之间传递文件:
正确的方法 . 使用人工制品 .
错误的方式 . 使用缓存 . 使用缓存键"hack" . 还需要同一个跑步者 .
所以,是的,通过gitlab方式假设在脚本之前拥有你的工作所依赖的一切 .
工件示例:
缓存示例:
对于正确的运行环境,我建议使用包含apt-get依赖关系的图像的docker . 并使用人工制品在工作之间传递工作结果 . 请注意,artefact还上传到gitlab web界面并能够下载它们 . 因此,如果它们很重,请使用小的expire_in时间,以便在完成所有工作后删除它们 .