私はPythonプロジェクトに取り組んでおり、minicondaを使って自分の環境を管理しています。私は私のbuild
ステージはセットアップ私はtest
段階を実行することがあった正しい環境をだろうと私は(間違って)想定し、次のランナー構成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;}'
とCIのためにGitLabを使用しています。 this questionとthis GitLab issueを見て私は
.gitlab-ci.ymlで定義された各ジョブは別々の(私たちは何の歴史がありませんと仮定し )ビルド
しかし塊の代替として実行されていることがわかり1つの段階で一緒にすべてが私は考えることができる唯一の他のオプションはbefore_script段階で環境の作成手順を置くことです
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;}'
をアピールされていない、BU各段階の前に同じ環境を継続的に再現することは冗長であるようです。