GitLab CI/CD zur Automatisierung von Tests

3 Mai, 2023 durch
GitLab CI/CD zur Automatisierung von Tests
Intero Technologies GmbH

GitLab bietet einem die Möglichkeit, mit Continuous Integration/Continuous Delivery Automatisierung in seine Abläufe zu integrieren. Die CI/CD Pipelines können direkt im Projekt konfiguriert und ausgeführt werden. Somit sind alle wichtigen Daten an einem Ort. Mit der Pipeline können Tests und Deployments automatisch ausgeführt werden. In diesem Beitrag wollen wir eine einfache Pipeline in einem Python Projekt erstellen.

Die ersten Schritte

Beginnen wir mit der Konfiguration - wenn wir einen Push durchführen wollen, werden die Tests ausgeführt. Da wir in einem Python Projekt arbeiten, nutzen wir für die Tests „pytest“ und „pylint“. Wenn wir dies getan haben, sieht die entstandene yml-Konfigurationsdatei wie folgt aus:


test_pytest:

  image: python:latest
  stage: test
  before_script:
    - pip3 install -U pytest
    - pytest --version
  script:
    - pytest
    - echo „Dieser Test ist fertig!“

test_pylint:
  image: python:latest
  stage: test
  before_script:
    - pip3 install pylint 
  script:
    - pylint calculator.py

Die Bedeutung von Keywords

Wir haben die Tests in zwei Jobs aufgeteilt und können dort einige Keywords sehen. Das Keyword „image“ legt fest, welches Docker Image wir für diesen Job nutzen. Da wir uns mit Python befassen, nutzen wir das Standard Python Image. Das Keyword „before_script“ wird direkt am Beginn des Jobs ausgeführt und installiert die notwendigen Programme. Der „before_script“ wird immer zuerst ausgeführt und wird meistens dazu genutzt, notwendige Änderungen wie eine Installation vor dem Hauptteil vorzunehmen.

Das Keyword „script“ ist der Hauptteil des Jobs, hier legen wir fest, was wir machen wollen. In diesem Fall führen wir die Tests aus. Wie man im Job „test_pytest“ sehen kann, können wir auch mehrere Befehle ausführen. Jeder Job wird in Shell Skript definiert. Also können wir auch komplexe Skripte erstellen.


Das letzte Keyword ist „stage“. Dieses Keyword gibt die Reihenfolge an, in welcher die Jobs ausgeführt werden. Um dies noch besser zu zeigen, haben wir die Konfiguration um einen weiteren Job erweitert.

test_pytest:
  image: python:latest
  stage: test
  before_script:
    - pip3 install -U pytest
    - pytest --version
  script:
    - pytest
    - echo „Dieser Test ist fertig!“


test_pylint:
  image: python:latest
  stage: test
  before_script:
    - pip3 install pylint 
  script:
    - pylint calculator.py

build_image:
  stage: deploy
  script:
    - docker build python-test .

Der Job „build_image“ ist in der Stage „deploy“ anstatt wie die Vorherigen in der Stage „test“. Weiterhin hat der Job auch kein Image angegeben. Dies bedeutet, dass wir das Standard Docker Image nutzen und kein spezielles Image.



Wie man sieht, haben wir zwei Phasen „test“ und „deploy“. In einer Stage werden alle Jobs standardmäßig parallel ausgeführt. Nur die Stages werden nacheinander ausgeführt. Wenn ein Job einer Stage fehlschlägt, werden die folgenden Stages übersprungen und die Pipeline beendet. In unserem Beispiel ist der Job „test_pylint“ fehlgeschlagen, da wir nicht alle Code Standards erfüllen.

Ausführungszeitpunkt

Wenn die Tests erfolgreich durchlaufen worden sind, wird jedes Mal erneut das Image gebaut. Allerdings wollen wir das Image nicht mit jedem Push bauen, sondern nur auf Wunsch erstellen. Dazu starten wir den Job nur bei manueller Ausführung wie folgt:

test_pytest:
  image: python:latest
  stage: test
  before_script:
    - pip3 install -U pytest
    - pytest --version
  script:
    - pytest
    - echo „Dieser Test ist fertig!“

test_pylint:
  image: python:latest
  stage: test
  before_script:
    - pip3 install pylint 
  script:
    - pylint calculator.py

build_image:
  stage: deploy
  when: manual
  script:
    - docker build python-test .

Dazu haben wir das Keyword „when“ eingebaut. Mit diesem Keyword kann man bestimmen, wenn der Job ausgeführt werden soll. In unserem Fall soll der Job nur starten, wenn wir ihn manuell starten. Natürlich können wir den Job auch immer ausführen, auch wenn die vorherigen Jobs fehlgeschlagen sind. Dazu tauschen wir einfach „manual“ gegen „always“ aus.



Somit haben wir eine GitLab CI/CD Pipeline für ein Python Projekt erstellt. Natürlich können wir diese Grundlagen auch für andere Projekte nutzen. In dieser Pipeline haben wir die wichtigsten Inhalte für Pipelines behandelt, das heißt, diese Vorlage hat alle nötigen Inhalte, um eigene Pipelines zu erstellen.

Jetzt kostenlose Odoo Beratung anfordern!


Rufen Sie uns an unter 03831 44557 0 oder nutzen Sie das Kontaktformular.

Odoo Beratung anfordern