Richten Sie eine CI/CD-Pipeline mithilfe von AWS CodePipeline und AWS CDK ein - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Richten Sie eine CI/CD-Pipeline mithilfe von AWS CodePipeline und AWS CDK ein

Erstellt von Konstantin Zarudaev (AWS), Cizer Pereira (AWS), Lars Kinder (AWS) und Yasha Dabas (AWS)

Code-Repository: AWS CodePipeline mit CI/CD

Umgebung: PoC oder Pilotprojekt

Technologien: DevOps

Arbeitsaufwand: Open Source

AWS-Dienste: AWS CodePipeline

Startseite

Die Automatisierung Ihres Software-Build- und Release-Prozesses mit Continuous Integration and Continuous Delivery (CI/CD) unterstützt wiederholbare Builds und die schnelle Bereitstellung neuer Funktionen für Ihre Benutzer. Sie können jede Codeänderung schnell und einfach testen und Fehler catch und beheben, bevor Sie Ihre Software veröffentlichen. Indem Sie jede Änderung Ihrem Staging- und Release-Prozess unterziehen, können Sie die Qualität Ihres Anwendungs- oder Infrastrukturcodes überprüfen. CI/CD verkörpert eine Kultur, eine Reihe von Betriebsprinzipien und eine Sammlung von Praktiken, die Anwendungsentwicklungsteams dabei unterstützen, Codeänderungen häufiger und zuverlässiger vorzunehmen. Die Implementierung wird auch als CI/CD-Pipeline bezeichnet.

Dieses Muster definiert eine wiederverwendbare Pipeline für kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD) auf Amazon Web Services (AWS). Die CodePipeline AWS-Pipeline wurde mit dem AWS Cloud Development Kit (AWS CDK) v2 geschrieben.

Mithilfe CodePipeline können Sie die verschiedenen Phasen Ihres Softwareveröffentlichungsprozesses über die AWS-Managementkonsole, die AWS-Befehlszeilenschnittstelle (AWS CLI) CloudFormation, AWS oder die AWS-SDKs modellieren. Dieses Muster demonstriert die Implementierung von CodePipeline und seine Komponenten mithilfe von AWS CDK. Zusätzlich zu den Construct-Bibliotheken enthält AWS CDK ein Toolkit (den CLI-Befehlcdk), das wichtigste Tool für die Interaktion mit Ihrer AWS-CDK-App. Das Toolkit bietet unter anderem die Möglichkeit, einen oder mehrere Stacks in CloudFormation Vorlagen zu konvertieren und sie auf einem AWS-Konto bereitzustellen.

Die Pipeline umfasst Tests zur Überprüfung der Sicherheit Ihrer Drittanbieter-Bibliotheken und trägt dazu bei, eine beschleunigte, automatisierte Veröffentlichung in den angegebenen Umgebungen sicherzustellen. Sie können die Gesamtsicherheit Ihrer Anwendungen erhöhen, indem Sie sie einem Validierungsprozess unterziehen.

Ziel dieses Musters ist es, die Verwendung von CI/CD-Pipelines zur Bereitstellung Ihres Codes zu beschleunigen und gleichzeitig sicherzustellen, dass die von Ihnen bereitgestellten Ressourcen den Best Practices entsprechen DevOps . Nachdem Sie den Beispielcode implementiert haben, verfügen Sie über ein AWS CodePipeline mit Linting-, Test-, Sicherheitscheck-, Bereitstellungs- und Nachbereitstellungsprozessen. Dieses Muster beinhaltet auch Schritte für Makefile. Mithilfe eines Makefiles können Entwickler CI/CD-Schritte lokal reproduzieren und so den Entwicklungsprozess beschleunigen.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktives AWS-Konto

  • Ein grundlegendes Verständnis im Folgenden:

    • AWS-CDK

    • AWS CloudFormation

    • AWS CodePipeline

    • TypeScript

Einschränkungen

Dieses Muster verwendet AWS CDK TypeScript nur für. Andere Sprachen, die von AWS CDK unterstützt werden, werden nicht abgedeckt.

Produktversionen

Verwenden Sie die neuesten Versionen der folgenden Tools:

  • AWS-Befehlszeilenschnittstelle (AWS Command Line Interface, AWS CLI)

  • cfn_nag

  • git-remote-codecommit

  • Node.js

Architektur

Zieltechnologie-Stack

  • AWS-CDK

  • AWS CloudFormation

  • AWS CodeCommit

  • AWS CodePipeline

Zielarchitektur

Die Pipeline wird durch eine Änderung im CodeCommit AWS-Repository (SampleRepository) ausgelöst. Zu Beginn CodePipeline erstellt es Artefakte, aktualisiert sich selbst und startet den Bereitstellungsprozess. Die daraus resultierende Pipeline stellt eine Lösung für drei unabhängige Umgebungen bereit:

  • Dev — Dreistufiger Codecheck in der aktiven Entwicklungsumgebung

  • Test — Integrations- und Regressionstestumgebung

  • Prod — Produktionsumgebung

Die Entwicklungsphase umfasst drei Schritte: Linting, Sicherheit und Komponententests. Diese Schritte laufen parallel ab, um den Prozess zu beschleunigen. Um sicherzustellen, dass die Pipeline nur funktionierende Artefakte bereitstellt, wird sie beendet, sobald ein Schritt im Prozess fehlschlägt. Nach einer Bereitstellung in der Entwicklungsphase führt die Pipeline Validierungstests durch, um die Ergebnisse zu überprüfen. Im Erfolgsfall stellt die Pipeline die Artefakte dann in der Testumgebung bereit, die die Validierung nach der Bereitstellung beinhaltet. Der letzte Schritt besteht darin, die Artefakte in der Prod-Umgebung bereitzustellen.

Das folgende Diagramm zeigt den Arbeitsablauf vom CodeCommit Repository bis zu den Build- und Aktualisierungsprozessen CodePipeline, die drei Schritte der Entwicklungsumgebung und die anschließende Bereitstellung und Validierung in jeder der drei Umgebungen.

Die Entwicklungsumgebung umfasst Linting, Sicherheit und Komponententests, alles inklusive Bereitstellung und Validierung.

Tools

AWS-Services

  • Das AWS Cloud Development Kit (AWS CDK) ist ein Softwareentwicklungs-Framework, das Sie bei der Definition und Bereitstellung der AWS-Cloud-Infrastruktur im Code unterstützt.

  • AWS CloudFormation hilft Ihnen dabei, AWS-Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus über AWS-Konten und Regionen hinweg zu verwalten. In diesem Muster können CloudFormation Vorlagen verwendet werden, um ein CodeCommit Repository und eine CodePipeline CI/CD-Pipeline zu erstellen.

  • AWS CodeCommit ist ein Versionskontrollservice, mit dem Sie Git-Repositorys privat speichern und verwalten können, ohne Ihr eigenes Quellcodeverwaltungssystem verwalten zu müssen.

  • AWS CodePipeline ist ein CI/CD-Service, der Ihnen hilft, die verschiedenen Phasen einer Softwareversion schnell zu modellieren und zu konfigurieren und die Schritte zu automatisieren, die für die kontinuierliche Veröffentlichung von Softwareänderungen erforderlich sind.

  • AWS Command Line Interface (AWS CLI) ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer Befehlszeilen-Shell mit AWS-Services interagieren können.

Andere Tools

  • cfn_nag ist ein Open-Source-Tool, das in CloudFormation Vorlagen nach Mustern sucht, um potenzielle Sicherheitsprobleme zu identifizieren.

  • git-remote-codecommitist ein Hilfsprogramm zum Pushen und Abrufen von Code aus CodeCommit Repositorys, indem es Git erweitert.

  • Node.js ist eine ereignisgesteuerte JavaScript Laufzeitumgebung, die für die Erstellung skalierbarer Netzwerkanwendungen konzipiert wurde.

Code

Der Code für dieses Muster ist im GitHub AWS CodePipeline with CI/CD Practices Repository verfügbar.

Bewährte Methoden

Überprüfen Sie Ressourcen wie die Richtlinien von AWS Identity and Access Management (IAM), um sicherzustellen, dass sie mit den bewährten Methoden Ihres Unternehmens übereinstimmen.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Installieren Sie Tools auf macOS oder Linux.

Wenn Sie macOS oder Linux verwenden, können Sie die Tools installieren, indem Sie den folgenden Befehl in Ihrem bevorzugten Terminal ausführen oder Homebrew für Linux verwenden.

brew install brew install git-remote-codecommit brew install ruby brew-gem brew-gem install cfn-nag
DevOps Ingenieur

Installieren Sie Tools mithilfe von AWS Cloud9.

Wenn Sie AWS Cloud9 verwenden, installieren Sie die Tools, indem Sie den folgenden Befehl ausführen.

gem install cfn-nag

Hinweis: In AWS Cloud9 sollten Node.js und npm installiert sein. Führen Sie den folgenden Befehl aus, um die Installation oder Version zu überprüfen.

node -v npm -v
DevOps Ingenieur

Richten Sie die AWS-CLI ein.

Verwenden Sie die Anweisungen für Ihr Betriebssystem, um AWS CLI einzurichten:

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Laden Sie den Code herunter oder klonen Sie ihn.

Gehen Sie wie folgt vor, um den Code abzurufen, der von diesem Muster verwendet wird:

  • Laden Sie den neuesten Quellcode aus den Releases im GitHub Repo herunter und entpacken Sie die heruntergeladene Datei in einen Ordner.

  • Klonen Sie das Projekt, indem Sie den folgenden Befehl ausführen.

git clone --depth 1 https://github.com/aws-samples/aws-codepipeline-cicd.git

Entfernen Sie das .git Verzeichnis aus dem geklonten Repository.

cd ./aws-codepipeline-cicd rm -rf ./.git

Später werden Sie ein neu erstelltes CodeCommit AWS-Repository als Remote-Ursprung verwenden.

DevOps Ingenieur

Connect zum AWS-Konto her.

Sie können eine Verbindung herstellen, indem Sie ein temporäres Sicherheitstoken oder eine Landingzone-Authentifizierung verwenden. Führen Sie die folgenden Befehle aus, um zu bestätigen, dass Sie das richtige Konto und die richtige AWS-Region verwenden.

AWS_REGION="eu-west-1" ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text) echo "${ACCOUNT_NUMBER}"
DevOps Ingenieur

Bootstrapping für die Umwelt.

Führen Sie die folgenden Befehle aus, um eine AWS-CDK-Umgebung zu booten.

npm install npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"

Nachdem Sie die Umgebung erfolgreich gebootet haben, sollte die folgende Ausgabe angezeigt werden.

⏳ Bootstrapping environment aws://{account}/{region}... ✅ Environment aws://{account}/{region} bootstrapped

Weitere Informationen zu AWS CDK-Bootstrapping finden Sie in der AWS CDK-Dokumentation.

DevOps Ingenieur

Synthetisieren Sie eine Vorlage.

Verwenden Sie den Befehl, um eine AWS CDK-App zu synthetisieren. cdk synth

npm run cdk synth

Die Ausgabe sollte folgendermaßen aussehen.

Successfully synthesized to <path-to-directory>/aws-codepipeline-cicd/cdk.out Supply a stack id (CodePipeline, Dev-MainStack) to display its template.
DevOps Ingenieur

Stellen Sie den CodePipeline Stack bereit.

Nachdem Sie die CloudFormation Vorlage nun gebootet und synthetisiert haben, können Sie sie bereitstellen. Bei der Bereitstellung werden die CodePipeline Pipeline und ein CodeCommit Repository erstellt, das als Quelle und Auslöser der Pipeline dient.

npm run cdk -- deploy CodePipeline --require-approval never

Nachdem Sie den Befehl ausgeführt haben, sollten Sie sehen, dass der CodePipeline Stack erfolgreich bereitgestellt und die Informationen ausgegeben wurden. Das CodePipeline.RepositoryName gibt Ihnen den Namen des CodeCommit Repositorys im AWS-Konto.

CodePipeline: deploying... CodePipeline: creating CloudFormation changeset... ✅ CodePipeline Outputs: CodePipeline.RepositoryName = SampleRepository Stack ARN: arn:aws:cloudformation:REGION:ACCOUNT-ID:stack/CodePipeline/STACK-ID
DevOps Ingenieur

Richten Sie das CodeCommit Remote-Repository und den Branch ein.

Nach einer erfolgreichen Bereitstellung CodePipeline wird der erste Lauf der Pipeline initiiert, den Sie in der CodePipeline AWS-Konsole finden. Da AWS CDK und CodeCommit kein Standard-Branch initiieren, schlägt dieser erste Pipeline-Lauf fehl und gibt die folgende Fehlermeldung zurück.

The action failed because no branch named main was found in the selected AWS CodeCommit repository SampleRepository. Make sure you are using the correct branch name, and then try again. Error: null

Um diesen Fehler zu beheben, richten Sie einen Remote-Ursprung als SampleRepository ein und erstellen Sie den erforderlichen main Branch.

RepoName=$(aws cloudformation describe-stacks --stack-name CodePipeline --query "Stacks[0].Outputs[?OutputKey=='RepositoryName'].OutputValue" --output text) echo "${RepoName}" # git init git branch -m master main git remote add origin codecommit://${RepoName} git add . git commit -m "Initial commit" git push -u origin main
DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Bestätigen Sie eine Änderung, um die Pipeline zu aktivieren.

Nach einer erfolgreichen ersten Bereitstellung sollten Sie über eine vollständige CI/CD-Pipeline mit einem main Zweig SampleRepository als Quellzweig verfügen. Sobald Sie die Änderungen an der main Verzweigung vorgenommen haben, initiiert die Pipeline die folgende Abfolge von Aktionen und führt sie aus:

  1. Holen Sie sich Ihren Code aus dem CodeCommit Repository.

  2. Erstellen Sie Ihren Code.

  3. Aktualisieren Sie die Pipeline selbst (UpdatePipeline).

  4. Führen Sie drei parallel Jobs für Linting-, Sicherheits- und Unit-Test-Checks aus.

  5. Im Erfolgsfall verteilt die Pipeline den Main Stack von der Entwicklungsumgebung in ./lib/main-stack.ts die Entwicklungsumgebung.

  6. Führen Sie nach der Bereitstellung eine Überprüfung der bereitgestellten Ressourcen durch. Sie können alle CodePipeline Schritte und Ergebnisse in der CodePipeline Konsole verfolgen.

  7. Im Erfolgsfall wiederholt die Pipeline die Bereitstellung und Validierung für die Test- und Prod-Umgebungen.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Führen Sie den Entwicklungsprozess mithilfe eines Makefiles aus.

Sie können die gesamte Pipeline lokal ausführen, indem Sie den make Befehl verwenden, oder Sie können einen einzelnen Schritt ausführen (z. B.make linting).

Führen Sie die folgenden Aktionen ausmake, um die Verwendung zu testen:

  • Implementieren Sie die lokale Pipeline: make

  • Nur Komponententests ausführen: make unittest

  • Auf das aktuelle Konto bereitstellen: make deploy

  • Säubere die Umwelt: make clean

App-Entwickler, DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Löschen Sie die AWS-CDK-App-Ressourcen.

Führen Sie den folgenden Befehl aus, um Ihre AWS CDK-App zu bereinigen.

cdk destroy --all

Beachten Sie, dass die Amazon Simple Storage Service (Amazon S3) -Buckets, die beim Bootstrapping erstellt werden, nicht automatisch gelöscht werden. Sie benötigen eine Aufbewahrungsrichtlinie, die das Löschen ermöglicht, oder Sie müssen sie manuell in Ihrem AWS-Konto löschen.

DevOps Ingenieur

Fehlerbehebung

ProblemLösung

Die Vorlage funktioniert nicht wie erwartet.

Wenn etwas schief geht und die Vorlage nicht funktioniert, stellen Sie sicher, dass Sie über Folgendes verfügen:

  • Die richtigen Versionen der Tools.

  • Zugriff auf das AWS-Zielkonto (Netzwerkkonnektivität).

  • Genügend Berechtigungen für das AWS-Zielkonto.

Zugehörige Ressourcen