Eine erste Pipeline
Ziel
In diesem Projekt geht es um erste Schritte mit der .gitlab-ci.yml
. Sie sollen:
- Jobs definieren
- Abhängigkeiten zwischen Jobs abbilden
- Sich mit (vordefinierten) Variablen vertraut machen
Hilfsmittel
- Versuchen Sie zuerst, die unten stehenden Aufgaben mit Hilfe der Folien und des Cheatsheets zu lösen.
- Sollten Sie dabei Probleme haben, finden Sie bei jeder Aufgabe einen ausklappbaren Block, in dem der Lösungsweg beschrieben wird.
Aufgabe 1 - Jobs
1.1 Pipeline Editor öffnen
- Öffnen Sie den Pipeline-Editor für ihr
gitlab-ci-demoapp
Projekt. - Die aktuelle
.gitlab-ci.yml
enthält nur ein einfaches Hello-World-Beispiel
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Den Pipeline-Editor finden Sie im Projekt-Menü auf der linken Seite unter:
- CI/CD ⇨ Editor
1.2 Jobs anlegen
- Legen Sie folgende 5 weitere Jobs an:
- Compile
- Lint
- Unittest
- Integrationtest
- Release
- Als Script genügt:
- eine Ausgabe via
echo "Compiling..."
/echo "Linting..."
etc. - ein
sleep 5
- eine Ausgabe via
- Löschen Sie das Hello-World-Beispiel
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Ihre
.gitlab-ci.yml
sollte anschließend wie folgt aussehen:Compile: script: - sleep 5 - echo "Compiling..." Lint: script: - sleep 5 - echo "Linting..." Unittest: script: - sleep 5 - echo "Unittesting..." Integrationtest: script: - sleep 5 - echo "Integrationtesting..." Release: script: - sleep 5 - echo "Releasing..."
1.3 Pipeline ausführen
- Commiten Sie ihre Änderungen
- Betrachten Sie die Ausführung der Pipeline und die Logs der einzelnen Jobs
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Im Pipeline-Editor ganz unten können Sie eine Commit-Nachricht angeben und einen Commit mit ihren Änderungen über den Button "Commit changes" erstellen.
- Über den Commit wird automatisch eine Pipeline getriggert
- Schauen Sie sich die Ausführung der Pipeline/der einzelnen Jobs an. Informationen zur aktuellen Pipeline-Ausführung finden Sie an folgenden Stellen:
- Im Pipeline-Editor ganz oben
- Links in der Navigation CI/CD ⇨ Pipelines
Aufgabe 2 - Stages
Die Jobs aus Aufgabe 1 laufen derzeit alle parallel. In dieser Aufgabe sollen sie nun durch Stages gruppiert werden.
2.1 Stages anlegen
- Legen Sie folgende drei Stages an:
- Build
- Test
- Release
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Fügen Sie folgende Zeilen oben in der
.gitlab-ci.yml
ein:stages: - Build - Test - Release
2.2 Jobs in Stages gruppieren
- Gruppieren Sie die Jobs so, dass sie den Stages wie folgt zugeordnet sind:
- Build
- Compile
- Lint
- Test
- Unittest
- Integrationtest
- Release
- Release
- Build
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Erweitern Sie die einzelnen Jobs mit dem
stage
Keyword nach folgendem Schema:Compile: stage: Build script: - sleep 5 - echo "Compiling..."
2.3 Pipeline ausführen
- Commiten Sie ihre Änderungen
- Betrachten Sie die Ausführung der Pipeline
- Die Jobs sollten nun in Stages gruppiert sein und entsprechend nacheinander ausgeführt werden
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Im Pipeline-Editor ganz unten können Sie eine Commit-Nachricht angeben und einen Commit mit ihren Änderungen über den Button "Commit changes" erstellen.
- Über den Commit wird automatisch eine Pipeline getriggert
- Schauen Sie sich die Ausführung der Pipeline/der einzelnen Jobs an. Informationen zur aktuellen Pipeline-Ausführung finden Sie an folgenden Stellen:
- Im Pipeline-Editor ganz oben
- Links in der Navigation CI/CD ⇨ Pipelines
Aufgabe 3 - Abhängigkeiten / Needs
3.1 Abhänigkeiten definieren
- Entfernen Sie die Definition und Zuweisung der Stages
- Definieren Sie folgende Abhängigkeiten
- Integrationtest und Unittest benötigen Compile
- Release benötigt Integrationtest und Unittest
- Erhöhen Sie den Sleep-Timer von Lint auf 60 Sekunden
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Ihre
.gitlab-ci.yml
sollte anschließend wie folgt aussehen:Compile: script: - sleep 5 - echo "Compiling..." Lint: script: - sleep 60 - echo "Linting..." Unittest: needs: - Compile script: - sleep 5 - echo "Unittesting..." Integrationtest: needs: - Compile script: - sleep 5 - echo "Integrationtesting..." Release: needs: - Unittest - Integrationtest script: - sleep 5 - echo "Releasing..."
3.2 Pipeline ausführen
- Commiten Sie ihre Änderungen
- Betrachten Sie die Ausführung der Pipeline
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Im Pipeline-Editor ganz unten können Sie eine Commit-Nachricht angeben und einen Commit mit ihren Änderungen über den Button "Commit changes" erstellen.
- Über den Commit wird automatisch eine Pipeline getriggert
- Schauen Sie sich die Ausführung der Pipeline/der einzelnen Jobs an. Informationen zur aktuellen Pipeline-Ausführung finden Sie an folgenden Stellen:
- Im Pipeline-Editor ganz oben
- Links in der Navigation CI/CD ⇨ Pipelines
Aufgabe 4 - Vordefinierte Variablen
4.1 Job anpassen
- Löschen Sie alle Jobs
- Erstellen Sie einen Job, der folgende vordefinierte Variablen ausgibt
CI_PIPELINE_SOURCE
CI_PIPELINE_ID
CI_PIPELINE_IID
- Suchen Sie sich in der Dokumentation 1-2 weitere Variablen heraus, die für Sie interessant sein könnten.
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Ihre
.gitlab-ci.yml
sollte anschließend wie folgt aussehen:Demo: script: - echo $CI_PIPELINE_SOURCE - echo $CI_PIPELINE_ID - echo $CI_PIPELINE_IID
4.2 Pipeline ausführen
- Commiten Sie ihre Änderungen
- Betrachten Sie das Log ihres Jobs
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Im Pipeline-Editor ganz unten können Sie eine Commit-Nachricht angeben und einen Commit mit ihren Änderungen über den Button "Commit changes" erstellen.
- Über den Commit wird automatisch eine Pipeline getriggert
- Schauen Sie sich die Ausführung der Pipeline/der einzelnen Jobs an. Informationen zur aktuellen Pipeline-Ausführung finden Sie an folgenden Stellen:
- Im Pipeline-Editor ganz oben
- Links in der Navigation CI/CD ⇨ Pipelines
4.3 Pipeline manuell ausführen
- Führen Sie die Pipeline ein weiteres mal manuell aus.
- Betrachten Sie das Log ihres Jobs
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Links in der Navigation CI/CD ⇨ Pipelines
- Oben Rechts über den Button "Run pipeline"
4.4 Pipeline per Schedule ausführen
- Erstellen Sie einen Schedule, der die Pipeline einmal am Tag ausführt.
- Führen Sie den Schedule manuell aus.
- Betrachten Sie das Log ihres Jobs
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Links in der Navigation CI/CD ⇨ Schedules
- Oben Rechts über den Button "New schedule"
- Wenn der Schedule erstellt ist, können Sie ihn in der Schedule-Übersicht manuell triggern
4.5 Schedule löschen
- Löschen Sie den Schedule wieder
(Optional) Aufgabe 5 - Stages und Abhängigkeiten kombinieren
- Kombinieren Sie Stages und Abhängigkeiten wie folgt:
- Stages und Jobzugehörigkeit wie in Aufgabe 2.2
- Die Jobs Unittest und Integrationstest sollen von Compile abhängig sein
- Fügen Sie für einen bessere Sichtbarkeit ein
sleep 60
in das Script vom Lint-Job ein - Erstellen Sie einen Commit und beobachten Sie den Effekt
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Ihre
.gitlab-ci.yml
sollte anschließend wie folgt aussehen:stages: - build - test - release Compile: stage: build script: - echo "Compiling..." Lint: stage: build script: - sleep 60 - echo "Linting..." Unittest: stage: test needs: - Compile script: - echo "Unittesting..." Integrationtest: stage: test needs: - Compile script: - echo "Integrationtesting..." Release: stage: release script: - echo "Releasing..."