CI/CD-Pipeline mit AWS-Tools, Teil 2

Commits und Tests mit AWS CodeCommit und CodeBuild

| Autor / Redakteur: Thomas Drilling / Stephan Augsten

Die Pipeline-Historie zeigt eine Reihe von „Execution IDs“ an.
Die Pipeline-Historie zeigt eine Reihe von „Execution IDs“ an. (Bild: Drilling / AWS Germany GmbH)

Ein neues Projekt ist in AWS CodeStar schnell erstellt. Umgehend kann man in den einzelnen Stufen experimentierten, z. B. mit neuen Commits zu Feature-Upgrades beitragen oder Unit-Tests implementieren. CodeStar visualisiert dabei den Projekt-Status und unterstützt die Tool-Integration.

CodeStar baut z. B. nach Auswahl eines Template-Projekts in Teil 1 dieses Beitrages das gesamte Projekt vollkommen selbstständig. Als Continuous-Integration-Komponente kommen AWS CodeBuild und AWS CodePipeline zum Einsatz; um die Bereitstellung kümmert sich AWS CodeDeploy.

In der Deployment-Pipeline zeigt CodeStar die Status der Stufen „Source“, „Build“ und „Deploy“.
In der Deployment-Pipeline zeigt CodeStar die Status der Stufen „Source“, „Build“ und „Deploy“. (Bild: Drilling / AWS Germany GmbH)

Der Verlauf und das Ergebnis der Integration und des Deployments zeigt CodeStar in der Projekt-Kachel „Continuous deployment“ an. Hierbei sollten nach kurzer Zeit die drei Pipeline-Stufen „Source“, „Build“ und „Deploy“ (bei AWS CodePipeline auch „Phasenübergänge“ genannt) auf grün (Succeeded) stehen und oben bei „Application endpoints“ der Anwendungs-Endpunkt angezeigt werden.

Die Pipeline-Historie zeigt eine Reihe von „Execution IDs“ an.
Die Pipeline-Historie zeigt eine Reihe von „Execution IDs“ an. (Bild: Drilling / AWS Germany GmbH)

Um Details zur Deployment-Pipeline aus der Perspektive von CodeStar bzw. CodePipeline einzusehen, stehen unterhalb der Continuous-Deployment-Kachel die Quicklinks „Pipeline history“ und „AWS CodePipeline details“ zur Verfügung. Mit einem Klick auf „Pipeline history“ wechselt CodeStar zur CodePipline-Console und zeigt eine Reihe von „Execution IDs“ an (je eine für jedes Mal, an dem die komplette Pipeline einmal durchlaufen wurde) und dem jeweiligen Execution-„Status“. Zu Beginn gibt es verständlicherweise genau eine „Execution ID“ mit dem Status „Succeeded“. In der Spalte „Source revisions“ ist das jeweilige Release (Revision) der bereitgestellten Anwendung zu sehen.

Die Bereitstellungsstufen von CodePipeline lassen sich je nach Bedarf erweitern.
Die Bereitstellungsstufen von CodePipeline lassen sich je nach Bedarf erweitern. (Bild: Drilling / AWS Germany GmbH)

Offensichtlich hat CodeStar automatisch eine dreistufige Pipeline mit zwei Phasenübergängen eingerichtet. Wie alle anderen beteiligten Tools lässt sich auch CodePipeline vollständig allein (also ohne CodeStar) verwenden und jederzeit um weitere Bereitstellungsstufen erweitern. Wir werden AWS CodePipeline noch einen gesonderten Artikel widmen.

Vom Untermenü „Pipeline / Pipelines / History“, in das uns CodeStar navigiert hat, wechseln wir jetzt noch einmal ins Menü „Pipeline / Pipelines / Pipeline“, um eine Top-Level-View auf die aktuelle Pipeline zu erlangen – in ähnlicher Weise, wie Sie uns die „Continuous deployment“-Kachel in CodeStar präsentiert. Dies ist die gleiche Ansicht, die man erreicht, wenn man vom CodeStar-Dashboard ausgebend unterhalb der „Continuous-Deployment-Kachel“ auf den Link „AWS CodePipeline details“ klickt.

Hier ist es nicht nur möglich, die einzelnen Übergänge zu konfigurieren, bzw. zu aktivieren/deaktivieren, die Ansicht zeigt uns auch, dass zum Bereitstellen der Anwendung ein AWS CloudFormation-Changeset und AWS CodeDeploy zum Einsatz kommen. Die Zusammenhänge werden klarer, wenn wir im Folgenden exemplarisch einem neuen Commit eine Code-Änderung implementieren.

Implementieren eines Code Commits

Das Beispiel zeigt eine Python-basierte Web-App an.
Das Beispiel zeigt eine Python-basierte Web-App an. (Bild: Drilling / AWS Germany GmbH)

Da wir den vom CodeStar-Wizard bereitgestellten Beispiel-Code nicht selbst implementiert haben, werfen wir zu Orientierung zunächst einen Blick auf den Code in CodeCommit. Für einen Test, ob die Anwendung überhaupt funktioniert, kann man erst einmal auf den Link mit den Anwendungsendpunkt im CodeStar-Dashboard klicken. Dadurch öffnet sich die Python-basierte Beispiel-Web-App in einem neuen Browserfenster.

Die Code-Bestandteile lassen sich über die CodeBuild-Console oder das CodeStar-Dashboard anzeigen.
Die Code-Bestandteile lassen sich über die CodeBuild-Console oder das CodeStar-Dashboard anzeigen. (Bild: Drilling / AWS Germany GmbH)

Um die Code-Bestandteile zu untersuchen, öffnet man die CodeBuild-Console oder klickt im CodeStar-Dashboard im Navigationsbereich links auf „Code“. Aus der unten direkt angezeigten Readme-Datei geht hervor, welche Rolle im Falle eines Python/Django-Projekts die beteiligten Steuer- und Konfigurationsdateien im Basis-Code-Verzeichnis spielen.

So enthält z. B. das Unterverzeichnis „ec2django“ sämtliche Django-Projektdateien für die exemplarische auf dem Django-Framework basierende Python-Applikation. Das Verzeichnis enthält daher auch eine Django-Konfigurationsdatei (settings.py) mit einem vordefinierten SECRET_KEY. In einer Produktionsumgebung sollte man daher diesen Anwendungsschlüssel durch einen selbst generierten Key ersetzen.

Die Datei „appspec.yml“ dient AWS CodeDeploy als Steuerdatei zum „Bereitstellen“ der Webanwendung für EC2, während die Datei „buildspec.yml“ von AWS CodeBuild zum „Bauen“ und „Testen“ der Anwendung verwendet wird. Im Unterverzeichnis „Requierements“ hingegen stecken Anforderungsdateien, die die Python-Abhängigkeiten beschreiben, die für Ihre Django-Anwendung in verschiedenen Umgebungen erforderlich sind. Das Unterverzeichnis „helloworld“ enthält wie zu erwarten die eigentlichen Django-Anwendungsdateien.

Zum Starten der Web-Applikation benötigt Django noch das Skript „manage.py“, während sich im Unterverzeichnis „scripts“ eine Reihe von Skripten finden, die von AWS CodeDeploy bei der Installation und Bereitstellung der Anwendung in der Amazon EC2-Instanz verwendet werden. Die Konfigurationsdatei „supervisord.conf“ wird von Supervisor zur Steuerung der Web-Anwendung in der Amazon EC2-Instanz verwendet.

An zentraler Stelle schließlich fungiert die Datei „template.yml“. Diese enthält die Beschreibung sämtlicher AWS-Ressourcen, die AWS CloudFormation zum Bereitstellen der eigentlichen Infrastruktur verwendet. Spätere Durchläufe von AWS CodePipeline erzeugen dann jeweils ein CloudFormation-Changeset, um die bestehende CloudFormation-Stacks entsprechend zu aktualisieren. Das JSON-File „template-configuration.json“ enthält den Projekt-ARN mit Platzhaltern, die von AWS zum Kennzeichnen von Ressourcen mit der Projekt-ID verwendet werden.

Wie genau die einzelnen YAML-Dateien die beteiligten Komponenten steuern, wie automatischen Übergänge durch Even-Hooks ausgelöst werden und wie man z. B. einen Unit-Test integriert, sehen wir uns in einem der folgenden Workshops an.

Jetzt wollen wir zunächst eine tatsächliche Code-Änderung implementieren: dazu setzen wir voraus, dass

  • der Projekt-Code in AWS CodeCommit gespeichert ist,
  • auf dem lokalen Computer git installiert ist
  • und der aktuelle-Master-Branch wie oben beschreiben mit git clone https://git-codecommit.eu-central-1.amazonaws.com/v1/repos/TDWebAppPyEC2 auf den lokalen Entwicklungscomputer repliziert wurde, auf dem die benötigten AWS-Tools, API-Keys, Phyton-Entwicklungsumgebungen und die erforderlichen git-Schlüssel verfügbar sind. Auf die Verwendung von „Branches“, etwa für einen separaten Feature-Branch wollen wir vorerst verzichten.

Wir ändern die Datei „~/helloworld/templates/index.html“.
Wir ändern die Datei „~/helloworld/templates/index.html“. (Bild: Drilling / AWS Germany GmbH)

Um eine kleine Änderungen zu implementieren öffnen wir im Falle des Django/Python-Beispiels die Datei „~/helloworld/templates/index.html“ mit einem beliebigen Editor und ändern in der Klassen-Definition „Message“ den Eintrag <h1>Congratulations!</h1> zu <h1> Congratulations2!</h1>.

Die erste Änderung am Repository wird mit CodeCommit synchronisiert.
Die erste Änderung am Repository wird mit CodeCommit synchronisiert. (Bild: Drilling / AWS Germany GmbH)

Anschließend müssen wir die geänderte Datei ins Repository einchecken, den „Commit“ ausführen und das Verzeichnis wieder mit dem Online-Repository auf CodeCommit synchron bringen:

git add index.html
git commit -m "Making my first change to the web app"
git push

Die Vorgänge innerhalb der Piepline lassen sich in Echtzeit einsehen.
Die Vorgänge innerhalb der Piepline lassen sich in Echtzeit einsehen. (Bild: Drilling / AWS Germany GmbH)

Unmittelbar nach Absetzen des push-Kommandos kann man wahlweise im CodePipeline-Dashboard oder in der entsprechenden Kachel im CodeStar-Dashboard oder in den Dashboards von AWS CodeBuild, bzw. AWS CodeDeploy überprüfen, was die Pipeline tut. So lässt sich z. B. auch die Installation der geänderten App im CodeDeploy-Dashboard verfolgen.

Nach kurzer Zeit steht die geänderte Anwendung bereit, wie das letzte Bild noch einmal zeigt.

Die geänderte Beispiel-Webapplikation.
Die geänderte Beispiel-Webapplikation. (Bild: Drilling / AWS Germany GmbH)

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 45693372 / CI / CD)