Testet ihr es? "Tox", das Unit-Tests in Python in mehreren Umgebungen ausführt. Es ist bequem, nicht wahr? Wenn Sie mit Jenkins eine CI-Umgebung erstellen, können Sie den Vorgang mit mehreren Versionen auf einmal überprüfen.
Die Installation von pyenv und die Vorbereitung mehrerer Python-Umgebungen erfordert jedoch viel Zeit und Mühe. Es ist also eine einfache Möglichkeit, mit Jenkins eine Umgebung aufzubauen, in der Tox verwendet wird.
Das Verfahren ist wie folgt.
Dieses Mal werde ich hauptsächlich den Teil erläutern, der die CI-Umgebung mithilfe von Jenkisfile dynamisch generiert. Daher werden wir die Konstruktion der Docker-Umgebung und von Jenkins weglassen. __ Stellen Sie jedoch sicher, dass Sie Jenkins in der Docker-Umgebung erstellen. __ __
Wenn Sie sich in einer Windows-Umgebung befinden, sollten Sie diese auf der folgenden Seite erstellen. https://qiita.com/sh1928kd/items/b248a8d48d16eaab9617
Wenn Sie einen Docker-Socket in einer Ubuntu-Umgebung usw. freigeben, achten Sie bitte auf die Socket-Berechtigung des Sockets auf der Host-Seite. Ein Fehler tritt auf, wenn Sie keine Ausführungsberechtigung von Jenkins-Seite haben.
Die Version von Jenkins zum Zeitpunkt des Schreibens des Artikels ist "Jenkins 2.255".
Gib ein, was du willst. Dieses Mal möchte ich das Ergebnis von Unittest und den Bericht über die Berichterstattung anzeigen. Installieren Sie also "JUnit" und "Cobertura".
Sie sollten in der Lage sein, die Umgebung nur mit der Jenkins-Datei zu erstellen. Als ich versuchte, pyenv beim Erstellen mehrerer Python-Umgebungen zu verwenden, funktionierte dies nicht. Daher werden wir DockerFile verwenden, um mehrere Python-Umgebungen zu erstellen.
FROM python:3.8
USER root
ENV HOME /root
ENV PYENV_ROOT $HOME/.pyenv
ENV PATH $PYENV_ROOT/bin:$PATH
# ENV HTTP_PROXY '{Proxy-Server-Adresse}'
# ENV HTTPS_PROXY '{Proxy-Server-Adresse'
# ENV FTP_PROXY '{Proxy-Server-Adresse}'
# RUN echo 'Acquire::http::Proxy "{Proxy-Server-Adresse}";' >> /etc/apt/apt.conf
# RUN echo 'Acquire::https::Proxy "{Proxy-Server-Adresse}";' >> /etc/apt/apt.conf
RUN apt-get update && apt-get upgrade -y \
&& apt-get install -y \
git \
make \
build-essential \
libssl-dev \
zlib1g-dev \
libbz2-dev \
libreadline-dev \
libsqlite3-dev \
wget \
curl \
llvm \
libncurses5-dev \
libncursesw5-dev \
xz-utils \
tk-dev \
libffi-dev \
liblzma-dev \
&& git clone https://github.com/pyenv/pyenv.git $PYENV_ROOT
RUN echo 'eval "$(pyenv init -)"' >> ~/.bashrc && \
eval "$(pyenv init -)"
RUN pyenv install 3.5.9
RUN pyenv install 3.6.2
RUN pyenv install 3.7.2
RUN pyenv install 3.8.2
RUN echo '3.5.9' >> .python-version
RUN echo '3.6.2' >> .python-version
RUN echo '3.7.2' >> .python-version
RUN echo '3.8.2' >> .python-version
Jenkinsfile ist nicht schwierig, wenn Sie die Umgebung mit Dockerfile erstellt haben
pipeline {
agent {
dockerfile {
filename 'Dockerfile'
args '-u root:sudo'
}
}
stages {
stage('setup') {
steps {
sh 'pip install flake8'
sh 'pip install tox'
sh 'pip install tox-pyenv'
}
}
stage('test') {
steps {
sh 'tox'
//Holen Sie sich Berichterstattung
cobertura coberturaReportFile: 'coverage.xml'
//Testergebnisse erhalten
junit 'junit_reports/*.xml'
}
}
}
}
Es könnte hilfreich gewesen sein, den Inhalt des Setups in DockerFile zu beschreiben.
Schreiben Sie tox.ini. Dieses Mal erhalten wir einen Testbericht und einen Bericht über die Berichterstattung. Daher haben wir festgelegt, dass jeder Bericht ausgegeben wird
tox.ini
[tox]
envlist = py35, py36, py37, py38, flake8
[travis]
python =
3.8: py38
3.7: py37
3.6: py36
3.5: py35
[testenv:flake8]
basepython = python
deps = flake8
commands = flake8 {Modulname zu analysieren} tests
[flake8]
exclude = tests/*
[testenv]
setenv =
PYTHONPATH = {toxinidir}
deps =
coverage
unittest-xml-reporting
commands =
rm -rf junit_reports
python -m xmlrunner discover -o junit_reports
coverage erase
coverage run --append setup.py test
coverage report --omit='.tox/*'
coverage xml --omit='.tox/*'
Wenn es sich um ein Projekt im PYPI-Format handelt, hat es grundsätzlich die folgende Struktur.
-project
|-module_dir/
|-main.py
|-tests/
|-test_main.py
|-setup.py
|-Dockerfile
|-Jenkinsfile
|-tox.ini
Schieben Sie das fertige Skript an Github usw.
Wählen Sie, um einen neuen Job zu erstellen.
Auf dem Einstellungsbildschirm
Klicken Sie im Jenkins-Jobbildschirm auf "Build ausführen", um die Umgebung aus der Docker-Datei und zu erstellen Jenkins wird das Ergebnis der Ausführung von Tox erhalten.
Ich habe die Umgebung eingeführt, um Tox mit Jenkins einfach auszuführen. Ich wollte es wirklich nur mit Jenkinsfile erstellen, aber ich habe das Verhalten um PATH nicht verstanden, also Ich habe eine Docker-Datei verwendet.
Wenn es sich um eine Projektstruktur im PyPI-Format handelt, kann sie mit dieser Methode fast wiederverwendet werden, sodass es einfach ist, eine Testumgebung zu erstellen. Da die Raw-Umgebung abgeschlossen ist, besteht außerdem der Vorteil, dass Sie die Auslassungen der Modulregistrierung und die abhängigen Bibliotheken kennen sollten.
Recommended Posts