构建后的测试将在 gitlab-ci 上的新环境中运行
Posted
技术标签:
【中文标题】构建后的测试将在 gitlab-ci 上的新环境中运行【英文标题】:test after build would run in new environment on gitlab-ci 【发布时间】:2015-10-15 22:00:20 【问题描述】:我有以下配置为 .gitlab-ci.yml 但我在成功通过构建阶段后发现(其中 会创建一个名为 venv 的 virtualenv),似乎 在测试阶段你会得到一个全新的环境(有 根本没有 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
adsd
【问题讨论】:
我基本上有同样的问题。我在gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/124 开了一个问题 【参考方案1】:Gitlab CI 作业应该是独立的,因为它们可以在不同的运行器上运行。这不是问题。在stage之间传递文件有两种方式:
正确的方法。使用人工制品。 错误的方式。使用缓存。使用缓存键“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/
为了正确的运行环境,我建议使用带有 apt-get 依赖项的镜像的 docker。并使用人工制品在工作之间传递工作结果。请注意,artefact 也上传到了 gitlab Web 界面并能够下载它们。因此,如果它们非常繁重,请使用小的 expire_in 时间,以便在所有工作完成后删除它们。
【讨论】:
感谢您的回复。 上述job_test
、job_install
中的artifacts:
没有成功拼凑起来以上是关于构建后的测试将在 gitlab-ci 上的新环境中运行的主要内容,如果未能解决你的问题,请参考以下文章
在开发/测试环境中模拟 Active Directory 登录