GitLab CI bewahrt die Umgebung zwischen den Erstellungsphasen
Ich arbeite an einem Python-Projekt und benutze miniconda um meine Umgebung zu verwalten. Ich verwende GitLab für CI mit der folgenden Runner-Konfiguration
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;}'
Ich habe (fälschlicherweise) angenommen, dass meinbuild
stage würde die richtige Umgebung einrichten, in der ich mein @ ausführen könntest
Bühne. Anschauendiese Frag unddieses GitLab-Problem Ich sehe da
Jeder in .gitlab-ci.yml definierte Job wird als separater Build ausgeführt (wobei davon ausgegangen wird, dass kein Verlauf vorhanden ist).
Aber die Alternative, alles in einer Stufe zusammenzufassen, ist nicht attraktiv
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;}'
Die einzige andere Option, die mir in den Sinn kommt, besteht darin, die Schritte zum Erstellen der Umgebung in ein @ zu setze before_script stage, aber es scheint überflüssig, die gleiche Umgebung vor jeder Stufe fortlaufend neu zu erstellen.