
GitLab bietet die Möglichkeit, CI/CD Pipelines direkt im Projekt zu konfigurieren. Alle Informationen zu seinem Git-Projekt sind an einem Fleck verfügbar, was einen einfachen Wechsel zwischen Quellcode, Branches und Pipelines ermöglicht.
Zum Starten wird eine .gitlab-ci.yml-Datei im Root-Verzeichnis angelegt – entweder manuell oder über das
GitLab-Interface. Die Konfigurationsdatei als versionierter Code bietet Vorteile wie Änderungshistorie und Konsistenz
zwischen Pipeline und Code-Stand.
Jobs - Die Schritte der Pipeline
Jobs sind die einzelnen Schritte einer Pipeline. Beispiel mit Maven:
build:
script:
- mvn compile
test:
script:
- mvn test
Das Schlüsselwort script definiert die auszuführenden Shell-Befehle. Mehrere Zeilen beginnen jeweils mit einem
Bindestrich.
Stages - Phasen der Pipeline
Stages sind nacheinander durchlaufene Phasen. Jobs einer Stage starten nur, wenn alle Jobs der vorherigen Stage erfolgreich abgeschlossen sind:
stages:
- Build
- Tests
build:
stage: Build
script:
- mvn compile
test:
stage: Tests
script:
- mvn test
Mehrere Jobs können einer Stage angehören:
stages:
- Build
- Tests
build:
stage: Build
script:
- mvn compile
test:unit:
stage: Tests
script:
- mvn test -DskipITs
test:integration:
stage: Tests
script:
- mvn test -Dtest=*IT
When - Konfiguration des Ausführungszeitpunkts
Das Schlüsselwort when steuert, wann Jobs ausgeführt werden. when: manual startet Jobs nur auf Wunsch:
test:integration:
stage: Tests
script:
- mvn test -Dtest=*IT
when: manual
Dies eignet sich für langläufige Tests, die manuelle Kontrolle benötigen.
Rules - Bedingungen für die Jobs
Mit rules werden Bedingungen für Job-Ausführung definiert. Beispiel – Deploy nur auf dem Master-Branch:
stages:
- Build
- Tests
- Deploy
build:
stage: Build
script:
- mvn compile
test:unit:
stage: Tests
script:
- mvn test -DskipITs
test:integration:
stage: Tests
script:
- mvn test -Dtest=*IT
when: manual
deploy:
stage: Deploy
script:
- mvn deploy -Dmaven.test.skip=true
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
Mehrere Regeln sind kombinierbar:
deploy:
stage: Deploy
script:
- mvn deploy -Dmaven.test.skip=true
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
- if: '$CI_COMMIT_REF_NAME =~ /^hotfix-/'
when: manual
Regeln werden der Reihe nach bewertet; sobald eine zutrifft, enden weitere Auswertungen.
CI/CD Variablen
CI/CD Variablen sind innerhalb der Pipeline-Konfiguration nutzbar. Sie lassen sich projekt-weit in den Einstellungen unter “CI/CD” oder direkt beim manuellen Pipeline-Start über “Run Pipeline” definieren.
GitLab stellt vordefinierte Variablen automatisch zur Verfügung. $CI_COMMIT_REF_NAME liefert beispielsweise den Namen
des Branch oder Tags, von dem die Pipeline erstellt wurde. Weitere vordefinierte Variablen ermitteln Commit-Autoren,
Default-Branch-Namen, Pipeline-IDs und mehr.
Eine vollständige Liste findet sich in der GitLab-Dokumentation zu Predefined Variables .
Extends - Vererbung von Eigenschaften
Jobs können Eigenschaften anderer Jobs erben. Eigenschaften des erbenden Jobs haben höhere Priorität:
stages:
- Build
- Tests
- Deploy
.master_only:
stage: Build
rules:
- if: '$CI_COMMIT_REF_NAME == "master"'
- if: '$CI_COMMIT_REF_NAME =~ /^hotfix-/'
when: manual
deploy:
extends: .master_only
stage: Deploy
script:
- mvn deploy -Dmaven.test.skip=true
Der Punkt am Anfang (.master_only) markiert einen versteckten Job, der nie in der Pipeline erscheint – ideal für
wiederverwendbare Konfigurationen. Das Schlüsselwort extends benennt den vererbenden Job. Ein Array mehrerer Job-Namen
ist möglich; der letzte Job hat höchste Priorität.
Mit diesen Grundlagen lassen sich hilfreiche Pipeline-Definitionen für Continuous Integration implementieren. GitLab CI/CD bietet aber noch zahlreiche weitere Funktionalitäten, die in der offiziellen Dokumentation erkundet werden können.
Quellen:
