Stages sind ein zentrales Konzept in GitLab CI, da sie die Reihenfolge festlegen, in der Jobs ausgeführt werden. Jede Pipeline ist in verschiedene Stages unterteilt, und innerhalb jeder Stage können mehrere Jobs parallel ausgeführt werden. Erst wenn alle Jobs einer Stage erfolgreich abgeschlossen sind, wird die nächste Stage gestartet.
Mit dem stages
-Keyword wird die Reihenfolge der Phasen
in einer Pipeline definiert. Typischerweise hat eine Pipeline Phasen wie
build, test, und
deploy, die genau diese Schritte im Entwicklungsprozess
widerspiegeln. Jede dieser Phasen besteht aus einem oder mehreren Jobs,
die unabhängig voneinander in parallelen Runner-Umgebungen ausgeführt
werden können.
Beispiel:
stages:
- build
- test
- deploy
In diesem Beispiel besteht die Pipeline aus drei Stages:
build
, test
und deploy
. Die Jobs
in der build
-Stage werden zuerst ausgeführt. Sobald diese
abgeschlossen sind, folgen die Jobs in der test
-Stage, und
schließlich die in der deploy
-Stage.
Jeder Job in der Pipeline muss einer Stage zugeordnet werden. Wenn
keine Stage explizit für einen Job definiert wird, wird er automatisch
der ersten Stage zugewiesen, die in der Pipeline definiert ist. Um einen
Job einer spezifischen Stage zuzuweisen, verwendet man das
stage
-Keyword innerhalb des Job-Blocks.
Beispiel:
build_job:
stage: build
script:
- echo "Building the project"
test_job:
stage: test
script:
- echo "Running tests"
deploy_job:
stage: deploy
script:
- echo "Deploying the project"
In diesem Beispiel haben wir drei Jobs: build_job
,
test_job
und deploy_job
. Jeder Job ist einer
spezifischen Stage zugeordnet. Zuerst wird build_job
in der
build
-Stage ausgeführt, danach test_job
in der
test
-Stage, und schließlich deploy_job
in der
deploy
-Stage.
Die Jobs innerhalb einer Stage werden parallel ausgeführt, wenn genügend Runner zur Verfügung stehen. Die Ausführung einer Stage beginnt jedoch erst, wenn alle Jobs der vorherigen Stage erfolgreich abgeschlossen wurden. Dies hilft, die Pipeline-Performance zu optimieren und sicherzustellen, dass bestimmte Schritte (wie Tests) nicht vorzeitig ausgeführt werden, bevor andere (wie der Build) abgeschlossen sind.
Weitere Informationen finden sich in der offiziellen GitLab-Dokumentation zu Stages.