In diesem Kapitel wirst du eine Applikation in ein Containerimage verpacken und dieses via CI/CD bauen. Anschließend baust du die notwendige Infrastruktur für das Deployment mit Terraform und lässt die Terraform Aufgaben auch in CI/CD laufen. Dieses Kapitel ist sehr praxisnah und ähnliche Aufgaben werden dich auch später erwarten.
Pipelines
und Jobs
sindstages
sindJob
zur Verfügung?Executor
und welche Arten gibt es?Artifacts
und für was benötige ich diese?Cache
von einem Artifact
?Rules
für die CI Pipelines
ECR
verwendenContinuous Integration
bedeutetDie Anforderungen in diesem Kapitel sind abstrakter. Das bedeutet, dass du bis zu einem gewissen Grad selbst entscheiden kannst, wie du bestimmte Dinge umsetzt. Denke an Best Practices und das ein Mentor einen Blick darauf haben wird, dass eine Lösung gut funktioniert. Der Anspruch sollte einer Architektur entsprechen, die demnächst produktiv eingesetzt wird. Teile wie das Monitoring dürfen allerdings noch fehlen, da diese später hinzugefügt werden.
Als Szenario kannst du dir vorstellen, dass eine App entwickelt wurde, aber die Entwickler keinerlei Ahnung von Automatisierung und Deployment haben. Jetzt ist es deine Aufgabe den Entwicklern eine entsprechende Konfiguration zur Verfügung zu stellen.
Achte wie immer darauf die einzelnen Aufgaben in Feature Branches zu verpacken und einen Merge Request für deinen Mentor zu erstellen.
Forke das Git Repository der Applikation
notestar
Show archive.org snapshot
. Lies die README.md
des Projekts um zu verstehen was erforderlich ist um diese Applikation zu betreiben.
Sorge dafür, dass für die Applikation ein funktionierendes Dockerimage gebaut werden kann. Das Docker Image soll auch in CI Pipelines gebaut werden mit folgenden Regeln:
/^v\d+.\d+.\d+$/
matched, soll ein container image mit genau diesem tag gepushed werden. Außerdem auch latest
/
im Namen haben können aber Container Image Tags nicht. Finde einen einfachen Weg dieses Problem zu vermeiden.Verwende Docker Compose um die Applikation lokal zu testen. Erweitere die bestehende docker-compose.yml
. Die vorhandene Datei ist nicht optimal konfiguriert, achte darauf das auch zu verbessern.
Erstelle ein Terraform Repository mit einer funktionierenden CI Konfiguration für Terraform. Folgendes soll erfüllt sein:
main
/master
branch gepushed wird, wird automatisch geplant. Der erstellte Plan soll einem manuellen apply
Job zur Verfügung stehen.terraform plan
ausgeführt werdenErstelle einen CI Job der in Merge Requests die Tests laufen lässt. Beachte, dass dafür ein laufender PostgreSQL benötigt wird und die Zugangsdaten per Environment Variable gesetzt werden müssen.
Betrachte die Tests, die für dieses Projekt geschrieben wurden. Ohne dich im Detail vielleicht mit Go auszukennen: Nenne mindestens 2 Dinge, die man an den Tests verbessern könnte/sollte.
Erstelle einen CI Job der pre-commit
in Merge Request Pipelines laufen lässt. Da dafür einige Abhängigkeiten notwendig sind, kann es sein, dass du ein eigenes Container Image hierfür benötigst.
Ersetze die Gitlab Container Registry mit ECR
.
Erstelle mit Terraform eine Infrastruktur für die Applikation, die folgende Anforderungen erfüllt:
Überlege und baue eine CI/CD Lösung, die immer das zuletzt gepushte Container Image mit Versions Tag (nicht Branchname) automatisch deployed.
terraform destroy
nachdem du die Infrastruktur deinem Mentor gezeigt hast