[PYTHON] Einfache toxische Umgebung mit Jenkins

zunaechst

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.

  1. Erstellen Sie Jenkins mit Docker
  2. Erstellen Sie eine Docker-Datei für den Container mit installiertem Pyenv
  3. Erstellen Sie eine Jenkins-Datei, die DockerFile verwendet
  4. Erstellen Sie tox.ini, um einen Komponententest und einen Abdeckungsbericht zu erhalten
  5. Platzieren Sie DockerFile, Jenkinsfile, tox.ini oben im Repository
  6. Erstellen Sie einen Pipeline-Job in Jenkins
  7. Build-Ausführung

Vorbereitungen

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. __ __

Erstelle Jenkins mit Docker

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".

Plugin

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".

Erstellen Sie eine Docker-Datei für den Container mit installiertem Pyenv

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

Erstellen Sie eine Jenkins-Datei, die eine Docker-Datei verwendet

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.

Erstellen Sie tox.ini, um Unit-Tests und Abdeckungsberichte zu erhalten

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/*'

Platzieren Sie DockerFile, Jenkinsfile, tox.ini oben im Repository

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

Erstellen Sie einen Pipeline-Job in Jenkins

Schieben Sie das fertige Skript an Github usw.

jenkins.png

Wählen Sie, um einen neuen Job zu erstellen.

  1. Geben Sie den Jobnamen in den Artikelnamen ein
  2. Wählen Sie eine Pipeline aus

jenkins2.png

Auf dem Einstellungsbildschirm

  1. Wählen Sie als Definition "Pipeline-Skript aus SCM"
  2. Wählen Sie "Git" für SCM
  3. Geben Sie den Repository-Pfad in die Repository-URL ein

Build-Ausführung

image.png

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.

Zusammenfassung

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

Einfache toxische Umgebung mit Jenkins
Einfache Jupyter-Umgebungskonstruktion mit Cloud9
Einfache Bereitstellungsumgebung mit Gaffer + Fabric
[Linux] Erstellen einer Jenkins-Umgebung mit Docker
Easy Grad-CAM mit Pytorch-Gradcam
Python-Umgebung mit Docker-Compose
Einfaches Debuggen mit ipdb
Virtuelle Umgebung mit Python 3.6
Einfache TopView mit OpenCV
Von Kafka bis KSQL - Einfache Umgebungskonstruktion mit Docker
Erstellen Sie eine Umgebung mit virtualenv
[Analyse des gemeinsamen Auftretens] Einfache Analyse des gemeinsamen Auftretens mit Python! [Python]
Minimale Konfigurations-Website-Umgebung mit Django
Installieren Sie die Python-Umgebung mit Anaconda
Verwalten Sie die Python-Umgebung mit virtualenv
Venv Umgebung mit Windows Powershell
Einfache Ordnersynchronisation mit Python
Erstellen Sie eine Python3-Umgebung mit Ubuntu 16.04
Machen Sie es mit der Syntax einfach
Bereiten Sie die Python3-Umgebung mit Docker vor
Einfaches Web-Scraping mit Scrapy
Erstellen Sie mit direnv eine Python-Umgebung
Einfache Python-Kompilierung mit NUITKA-Utilities
Einfacher HTTP-Server mit Python
Einfache Proxy-Anmeldung mit Django-Hijack
Wechseln Sie die virtuelle Umgebung mit Jupiter
Umgebungsvariablen mit Lambda-Uploader einstellen
Erstellen einer Kubernetes-Umgebung mit ansible 2
Bereiten Sie die Pipenv-Umgebung mit Amazon Linux 2 vor
Aktivieren Sie die virtuelle Umgebung von Anaconda mit PowerShell
Einfache Vorhersage von Zeitreihen mit Prophet
Beginnen Sie mit Python! ~ ① Umweltbau ~
[Python] Einfache Parallelverarbeitung mit Joblib
Seien Sie vorsichtig mit einfachen Methodenreferenzen
Einfacher Slackbot mit Docker und Errbot
Richten Sie mit Homebrew eine moderne Python-Umgebung ein
Ruby-Umgebungskonstruktion mit aws EC2
Erstellen Sie eine MySQL + Python-Umgebung mit Docker
Erstellen Sie eine virtuelle Umgebung mit Python!
Erstellen einer virtuellen Umgebung mit Python 3
Einfache GUI App mit Tkinter Text
Einfach pyspark mit conda installieren
Erstellen Sie eine Flask-Umgebung mit Dockerfile + docker-compose.yml
Einfache Python + OpenCV-Programmierung mit Canopy
Einfache Mailübertragung mit Eile Python3
Bayesianische Optimierung, die mit Python sehr einfach ist
Erstellen Sie eine IPython Notebook-Umgebung mit boot2docker
Einfacher AWS S3-Test mit MinIO
Automatisieren Sie die Umgebungserstellung mit ShellScript
Einfache japanische Schrifteinstellung mit matplotlib
Python3-Umgebungskonstruktion mit pyenv-virtualenv (CentOS 7.3)
Visualisieren Sie Ihre Daten ganz einfach mit Python Seaborn.
Verwenden von Chainer mit CentOS7 [Umgebungskonstruktion]
Einfach mit Slack mit Bot #NowPlaying
Zeichnen Sie einfach Diagramme mit matplotlib