【发布时间】:2016-12-16 15:10:46
【问题描述】:
我正在开发一个 python 项目并使用miniconda 来管理我的环境。我正在使用具有以下运行器配置的 GitLab 进行 CI
stages:
- build
- test
build:
stage: build
script:
- if hash $HOME/miniconda/bin/conda 2>/dev/null;
then
export PATH="$HOME/miniconda/bin:$PATH";
else
wget http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh;
bash miniconda.sh -b -p $HOME/miniconda;
export PATH="$HOME/miniconda/bin:$PATH";
fi
- conda update --yes conda
test:
stage: test
script:
- conda env create --quiet --force --file environment.yml
- source activate myenv
- nosetests --with-coverage --cover-erase --cover-package=mypackage --cover-html
- pylint --reports=n tests/test_final.py
- pep8 tests/test_final.py
- grep pc_cov cover/index.html | egrep -o "[0-9]+\%" | awk '{ print "covered " $1;}'
我假设(错误地)我的build 阶段会设置正确的环境,我可以在其中运行我的test 阶段。看着this question 和this GitLab issue 我明白了
.gitlab-ci.yml 中定义的每个作业都作为单独的构建运行(我们 假设没有历史)
但是将所有内容集中在一个阶段的替代方法并不吸引人
stages:
- test
test:
stage: test
script:
- if hash $HOME/miniconda/bin/conda 2>/dev/null;
then
export PATH="$HOME/miniconda/bin:$PATH";
else
wget http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh;
bash miniconda.sh -b -p $HOME/miniconda;
export PATH="$HOME/miniconda/bin:$PATH";
fi
- conda update --yes conda
- conda env create --quiet --force --file environment.yml
- source activate myenv
- nosetests --with-coverage --cover-erase --cover-package=mypackage --cover-html
- pylint --reports=n tests/test_final.py
- pep8 tests/test_final.py
- grep pc_cov cover/index.html | egrep -o "[0-9]+\%" | awk '{ print "covered " $1;}'
我能想到的唯一其他选择是将环境创建步骤放在before_script 阶段,但在每个阶段之前不断重新创建相同的环境似乎是多余的。
【问题讨论】:
标签: gitlab gitlab-ci gitlab-ci-runner