Überspringen zum Hauptinhalt

Was ist eine CI/CD-Pipeline?

Unternehmen stehen unter dem Druck, Software-Updates, Fehlerbehebungen und neue Innovationen in einem zunehmend wettbewerbsintensiven Anwendungsmarkt zu bewältigen. Software- und Betriebsteams müssen eng zusammenarbeiten, um auf das Feedback der Benutzer zu reagieren, Probleme zu lösen und Updates bereitzustellen, ohne die Geschäftsvorgänge zu beeinträchtigen. Herkömmliche Softwareentwicklungszyklen, insbesondere solche, die auf dem sequentiellen Wasserfallmodell basieren, haben Schwierigkeiten, mit dem Tempo der modernen Softwarebereitstellung Schritt zu halten. Da der Softwareentwicklungszyklus immer kompakter wird, setzen Entwicklungsteams auf CI/CD, um präzisen, hochwertigen und sichereren Code effizient zu erstellen.

CI/CD steht für Continuous Integration (kontinuierliche Integration) und Continuous Delivery (kontinuierliche Bereitstellung). In einigen Fällen kann CD auch Continuous Deployment (kontinuierliche Bereitstellung) bedeuten.

  • Continuous Integration ermöglicht es mehreren Entwicklern, gleichzeitig an ihrem Code zu arbeiten und ihn zusammenzuführen, ohne die Codestabilität zu beeinträchtigen.
  • Continuous Delivery ist ein automatisierter Workflow zum Testen, Validieren und Vorbereiten von Software für die Veröffentlichung nach menschlicher Genehmigung.
  • Continuous Deployment ähnelt Continuous Delivery, mit dem Unterschied, dass die Genehmigung durch vorkonfigurierte Regeln automatisiert wird.

Zusammen können CI/CD als Pipeline implementiert werden, die alle Prozesse automatisiert, die zuvor manuell durchgeführt wurden. Um besser zu verstehen, wie die CI/CD-Pipeline funktioniert, sehen Sie sich das folgende Diagramm an.

Jede Stufe der CI/CD-Pipeline umfasst spezifische Aktivitäten innerhalb des Softwareentwicklungsprozesses. Sie bieten automatisierte Tests, um den Code auf Qualität, Schwachstellen und andere technische Probleme zu überprüfen, bevor Software-Builds weitergegeben werden. So können Entwicklungsteams Codeprobleme früher erkennen und beheben, was Unternehmen viel Zeit, Ressourcen und Kosten spart.

Das Einrichten einer CI/CD-Pipeline scheint einfach zu sein. Unternehmen stehen jedoch häufig vor Herausforderungen bei der Implementierung von CI/CD-Workflows, insbesondere bei einer On-Premises-Einrichtung. Beispielsweise stoßen Unternehmen auf Infrastrukturengpässe, wenn sie eine größere Anzahl von Anwendungen, Tools und Teammitgliedern verwalten müssen. Wenn dieses Problem nicht behoben wird, verbringen Entwickler mehr Zeit damit, die Pipeline zu reparieren, anstatt am Code selbst zu arbeiten.

Durch die Verlagerung von CI/CD-Workflows in die AWS Cloud können Teams moderne Softwareentwicklungs-Workloads skalieren, Änderungen effektiver kommunizieren und Ressourcen effizienter verwalten. Beispielsweise hat Duolingo seine CI/CD-Pipeline auf AWS EC2 Mac migriert und fortschrittliche Auto-Scaling-Strategien implementiert. Dadurch konnten sie die Entwicklungszeit von 50 Minuten auf nur 16 Minuten reduzieren.

Wie kann man eine CI/CD-Pipeline einrichten?

AWS gestaltet die CI/CD-Implementierung mit verwalteten und automatisierten Services einfacher, automatisierter und sicherer. Anstatt Entwicklungstools, Server und Ressourcen manuell bereitzustellen, kann sich Ihr Team auf wichtige Aktivitäten konzentrieren, wie beispielsweise die Beantwortung von Benutzeranfragen und die Strategieplanung für den Software-Release-Prozess.

Zunächst können Sie AWS CloudFormation nutzen, um Cloud-Ressourcen automatisch bereitzustellen, die DevOps-Teams für die Einrichtung einer CI/CD-Pipeline benötigen. Sie beginnen damit, die benötigten Ressourcen in der Vorlage zu beschreiben oder vorgefertigte Vorlagen zu verwenden. CloudFormation stellt dann die Ressourcen bereit, die zusammen die grundlegende Umgebung bilden, die CI/CD unterstützt. Anschließend können Sie die CI/CD-Pipeline-Stufen wie folgt in der AWS Cloud implementieren.

Quelle

Die Quellstufe verfolgt die Versionsänderungen, die Entwickler vornehmen. Entwickler kopieren eine Version des Originalcodes aus dem gemeinsam genutzten zentralen Repository auf ihren lokalen Rechner. Anschließend bearbeiten, kompilieren und testen sie den geänderten Code und führen ihn mit dem Repository zusammen.

So kann Ihr Team Codeänderungen mit AWS-Tools vornehmen und verwalten.

Schritt 1 – Codes mit IDE erstellen

Entwickler können mit AWS Cloud9, einer Cloud-basierten integrierten Entwicklungsumgebung (IDE), die gängige Programmiersprachen unterstützt, neuen Code erstellen oder vorhandenen Code bearbeiten. Mit Cloud9 können Sie Quellcode in einem Webbrowser schreiben, ausführen und debuggen, solange Sie Zugriff auf das Internet haben. Wenn Sie eine Drittanbieter-IDE installieren, können Sie alternativ Software Development Kits (SDKs) herunterladen, um das Schreiben von Code in verschiedenen Sprachen wie Java, Python und JavaScript zu ermöglichen. Mit den SDKs können Sie über die Anwendungsprogrammierschnittstelle (API) von Ihrer bevorzugten Programmierumgebung aus auf AWS-Ressourcen und -Bibliotheken zugreifen.

Schritt 2 – Code in das zentrale Repository übertragen

Entwickler nutzen Drittanbieter-Tools wie GitHub, um private Code-Repositorys zu erstellen, Pull-Anforderungen zu verwalten und Änderungen zusammenzuführen. Es dient als Versionskontrollsystem, mit dem Sie Änderungen verfolgen können, die andere Entwickler vorgenommen haben, und bei Bedarf zu einem früheren funktionsfähigen Quellcode zurückkehren können.

Erstellen und testen

In der Build-Stufe wird der im zentralen Repository gespeicherte Code an einen Buildserver gesendet. Dann wandelt der Buildserver den Quellcode und die Abhängigkeiten in eine Software-Datei um, die als Artefakt bezeichnet wird und von den Entwicklern in nachfolgenden Stufen ausgeführt werden kann. Wenn Sie zum Beispiel ein Java-Programm erstellen, erhalten Sie eine JAR- oder WAR-Datei. In dieser Stufe können mehrere vorläufige Tests durchgeführt werden, einschließlich Komponenten- und statischer Codeanalysen.

  • Komponententests stellen sicher, dass einzelne Software-Funktionen die richtigen Ergebnisse liefern. 
  • Statische Codeanalysen überprüfen den Quellcode auf Fehler, Sicherheitslücken und die Einhaltung von Codierungsstandards.

Wenn der Code einen Test nicht besteht, setzen die Entwickler ihn auf den vorherigen Zustand zurück und beheben die Probleme.

Üblicherweise müssen Software-Teams ihre eigenen Buildserver einrichten, um ihre Anwendungen zu verpacken. Darüber hinaus müssen sie Testskripte manuell schreiben, diese validieren und die Ergebnisse durch wiederholte Iterationen überwachen. Jetzt können sie AWS CodeBuild nutzen, um den CI/CD-Build-Workflow zu beschleunigen. Damit kann Ihr Team Builds automatisieren und Software testen, während Änderungen vorgenommen werden. Es findet den Quellcode aus dem angegebenen Repository und führt das von Ihnen konfigurierte Build-Skript aus.

AWS CodeBuild skaliert seine Rechenkapazität automatisch, um sie an Ihre Build-Workloads anzupassen. Auf diese Weise müssen Sie nicht warten, bis vorherige Builds abgeschlossen sind, bevor Sie einen neuen starten können. Software-Teams können Codeprobleme frühzeitig erkennen und beheben, bevor sie komplex werden.

Wenn Sie zum Beispiel ein Node.js-Projekt erstellen, können Sie das Jasmine- oder Jest-Test-Framework in AWS CodeBuild integrieren. Mit diesen Frameworks können Sie einfach Testfälle schreiben, erwartete Ergebnisse angeben und diese während der Build-Ausführungen validieren. 

Die Teststufe folgt unmittelbar auf die Erstellung. Sie dient dazu, die Anwendung strengeren Tests zu unterziehen, damit die Software-Teams die Codequalität, Leistung, Sicherheit und andere wichtige Aspekte verbessern können. Mit einer CI/CD-Pipeline werden Tests automatisiert und erstrecken sich auf mehrere Bereiche.

  • Integrationstests stellen sicher, dass alle Services und Drittanbieterkomponenten, die die Anwendung nutzt, korrekt miteinander interagieren.
  • Funktionstests bieten eine umfassende Bewertung der Anwendung aus Sicht des Endbenutzers.
  • Sicherheitstests untersuchen die Anwendung auf mögliche Sicherheitsrisiken und Sicherheitslücken.
  • Leistungstests stellen sicher, dass die Anwendung auch unter extremen oder unerwarteten Bedingungen, wie beispielsweise einem plötzlichen Anstieg des Datenverkehrs, reaktions- und funktionsfähig bleibt.

Auch hier muss die Anwendung alle angegebenen Tests bestehen, bevor sie zur nächsten Stufe übergehen kann.

Staging

Mit Staging können Sie die Anwendung vor der Freigabe für Endbenutzer einer abschließenden Prüfung unterziehen. In dieser Stufe stellen die Software-Teams die Anwendung in einer Umgebung bereit, die reale Implementierungen nachahmt. Häufig verwenden sie Testdaten und beauftragen eine Gruppe von Endnutzern mit dem Testen der Anwendung, um vor der Veröffentlichung unentdeckte Probleme zu erkennen.

Beispielsweise haben Sie eine Anwendung aktualisiert und möchten nun überprüfen, wie sie bei Benutzerinteraktionen reagiert. Durch den Einsatz in der Staging-Umgebung können Sie die Softwareleistung bewerten, ohne den Geschäftsbetrieb zu stören. Nachdem alle Testbedingungen erfüllt sind, stellen Softwareteams die Anwendung in der Produktionsumgebung bereit, wodurch sie für Endbenutzer zugänglich ist.

Die Bereitstellung in verschiedenen Umgebungen kann eine Herausforderung darstellen, insbesondere wenn Teams dies manuell durchführen. AWS CodeDeploy kann die Anwendungsbereitstellung vereinfachen. Es automatisiert die Anwendungsbereitstellung in verschiedenen Umgebungen. Sie können Bereitstellungsaktivitäten anzeigen, Änderungen verfolgen und bei Bedarf zu einer früheren Version zurückkehren. Es schließt auch die Lücke zwischen Staging und Produktion. Sie können zum Beispiel genau dieselben Bereitstellungsanweisungen, die Sie für das Staging nutzen, auch für ein Produktions-Release verwenden.

Produktion

Die Produktion ist die Live-Umgebung, in der echte Benutzer auf Ihre Anwendung zugreifen. Nach dem Ändern, Testen und Validieren der Änderungen veröffentlichen die Softwareteams die aktualisierte Anwendung in der Produktionsumgebung. Während dieser Schritt das Ende der CI/CD-Pipeline markiert, werden die Bemühungen fortgesetzt, um sicherzustellen, dass die Anwendung die Leistungs-, Sicherheit- und Geschäftsanforderungen erfüllt. Deshalb müssen Sie die Anwendung während ihres Betriebs in der Produktion kontinuierlich überwachen.

Amazon CloudWatch ist ein Service, der Entwicklungs- und Betriebsteams Einblick in Anwendungen bietet, die sie in AWS, On-Premises oder in anderen Cloud-Umgebungen bereitstellen. Es sammelt und visualisiert automatisch Betriebsdaten, sodass Sie sich ein besseres Bild davon machen können, wie Ihre Anwendung unter realen Bedingungen funktioniert. Darüber hinaus können Sie Warnmeldungen einrichten und sich über Ereignisse informieren lassen, die eine sofortige Reaktion Ihrer Teams erfordern.  

Wie kann man eine CI/CD-Pipeline automatisieren?

Die Optimierung von CI/CD-Tools verschiedener Anbieter kann eine Herausforderung darstellen, insbesondere wenn umfangreiche manuelle Setups erforderlich sind. Mit AWS CodePipeline können Sie jedoch den gesamten Code-Release-Prozess automatisieren, skalieren und beschleunigen und dabei gleichzeitig flexibel bleiben.

Mit AWS CodePipeline können Sie einen CI/CD-Workflow mit einer grafischen Benutzeroberfläche modellieren. Sie können AWS-Services ganz einfach in Ihre Pipeline integrieren oder mit bereits vorhandenen Tools und Ressourcen verbinden, die Sie verwenden. Wenn Sie beispielsweise Jenkins als Buildserver verwenden möchten, können Sie es in AWS CodePipeline integrieren.

Nachfolgend fassen wir die dafür erforderlichen Schritte zusammen.

  1. Installieren Sie Jenkins und das AWS-CodePipeline-Plugin für Jenkins.
  2. Legen Sie anschließend mit AWS Identity and Access Management (IAM) die Zugriffsberechtigung für Jenkins fest. Dadurch kann Jenkins autorisierte Anmeldeinformationen für die Interaktion mit AWS CodePipeline verwenden.
  3. Melden Sie sich bei der AWS-CodePipeline-Konsole an und erstellen Sie eine benutzerdefinierte Pipeline.
  4. Verbinden Sie die Pipeline mit einem gemeinsam genutzten Quellcode-Repository, wie beispielsweise GitHub.
  5. Fügen Sie anschließend eine Build-Stufe hinzu und wählen Sie Jenkins als Buildserver aus.
  6. Fügen Sie alle erforderlichen Teststufen hinzu, einschließlich der erforderlichen Testaktionen und Build-Trigger.
  7. Verbinden Sie als Nächstes die Bereitstellungsstufe mit AWS CodeDeploy oder einem anderen Bereitstellungsservice. 

Wie kann AWS Sie bei Ihren Anforderungen an die CI/CD-Pipeline unterstützen?

Eine CI/CD-Pipeline ermöglicht es Unternehmen, Anwendungs-Updates schneller zu erstellen, zu testen und zu veröffentlichen, ohne dabei Kompromisse bei der Softwarequalität und -sicherheit einzugehen. Softwareentwicklungsteams modifizieren Code, führen Änderungen zusammen, automatisieren Tests, planen die Bereitstellung und vieles mehr mit automatisierten CI/CD-Tools. Einige Teams stehen jedoch aufgrund von Einschränkungen in Bezug auf Infrastruktur, Ressourcen und Prozesse vor Herausforderungen bei der Skalierung von CI/CD-Workflows.

AWS bietet eine Reihe von Cloud-basierten Lösungen zum Erstellen, Optimieren und Skalieren Ihrer CI/CD-Pipeline.

  • AWS CloudFormation stellt Ressourcen bereit, auf denen CI/CD-Tools ausgeführt werden.
  • Mit AWS Cloud9 können Entwickler Code über ihren Browser schreiben, ausführen und debuggen.
  • Mit AWS CodeBuild können Sie Ihre Anwendung kompilieren, testen und packen, ohne eigene Buildserver verwalten zu müssen.
  • AWS CodeDeploy automatisiert die Bereitstellung in jeder Umgebung, einschließlich On-Premises- und AWS-Instances.
  • Mit AWS CodePipeline können Sie den gesamten CI/CD-Workflow modellieren, von der Quelle bis zur Live-Produktionsumgebung.
  • Mit AWS CloudWatch können Betriebsteams bereitgestellte Anwendungen kontinuierlich überwachen, protokollieren und analysieren.

Wenn Sie weitere Unterstützung beim Einrichten einer CI/CD-Pipeline benötigen, wenden Sie sich bitte an Amazon Professional Services.