Automatisierung von Kontinuierlichen Lieferung in Containern mit CodeBuild, ECR, und CodeDeploy

0
175
Shutterstock/Ribkhan

Continuous Integration/Continuous Delivery (CI/CD) ist der Prozess der Automatisierung der Anwendungs-updates, die von änderungen im source-control, um automatisierte builds, automatisierte Bereitstellungen auf Ihre Server. AWS bietet ein service, das den Namen CodePipeline, die konfiguriert werden können, um die Arbeit mit Containern.

Continuous Delivery in Containern

Container sind ein bisschen mehr kompliziert als traditionelle Anwendungen. Viele Container-Anwendungen tatsächlich machen Verwendung von zwei container-Bilder. Die erste, genannt das Basis-image, ist im wesentlichen ein benutzerdefiniertes AMI vorinstalliert mit Abhängigkeiten und anderen Anwendungen. Dies geschieht, um speed up build-Zeiten, denn wenn Sie nur die Aktualisierung Ihrer Anwendung code, brauchen Sie nicht zu gehen, Neuinstallation von NGINX und jedem anderen bit-software auf den container. Das zweite Bild ist die eigentliche Anwendung, die Bild, die sich von dem Basis-image und enthält einen eigenen code.

Als solche, die CI/CD-pipeline, dass wir tatsächlich zwei pipelines. Die erste Uhr für änderungen an der Ausgangssicherung und die trigger eine Neuerstellung und Aktualisierung ECR, wenn es passiert. Die zweite pipeline enthält zwei source-Phasen—eins, dass die Uhren für änderungen an den Basis-image der ECR-repository, und eine, die zuhört, die für updates in der Anwendung Bild-source-code. Auf diese Weise, wenn Sie nur die Aktualisierung der Anwendung Bild, das Basis-image muss nicht umbauen.

Mit zwei pipelines, CodePipeline löst Anwendungs-updates in einer von zwei Möglichkeiten:

  • Änderungen an der Anwendung Bild löst einen Neuaufbau der Anwendung Bild, mit der neuesten Basis-image, das nicht braucht, wieder aufgebaut werden. Das update wird geschoben, um den ECR, mit dem optionalen Einsatz auf ECS oder einem anderen container-service.
  • Änderungen am base-image löst einen Neuaufbau von der Basis-image, die Installation der updates zu ECR. Dies wiederum auslösen einer Neuerstellung der Anwendung Bild, das wird geschoben, um ECR und dann auf ECS.

Aber dieses dual-pipeline-setup kann möglicherweise nicht erforderlich sein, indem Sie alle Anwendungen, und wenn Sie nur mit einer bereits bestehenden Basis OS image wie Ubuntu, brauchst du nur eine pipeline, alles zu behandeln.

IAM-Rollen-Setup

Zuerst müssen Sie zum einrichten eines service-Rolle zu geben, CodeBuild die erforderlichen Berechtigungen zur Interaktion mit anderen AWS-services (wie ECR) in Ihrem Namen. Öffnen Sie die IAM-Management-Konsole, dann eine neue Rolle erstellen Sie unter “Rollen.” Wählen Sie “AWS-Service” und wählen Sie CodeBuild in der Liste.

Für die Politik, Sie möchten eine neue Richtlinie erstellen, mit den folgenden Berechtigungen:

{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “CloudWatchLogsPolicy”,
“Effect”: “Allow”,
“Action”: [
“Protokolle:CreateLogGroup”,
“Protokolle:CreateLogStream”,
“Protokolle:PutLogEvents”
],
“Ressource”: [
“*”
]
},
{
“Sid”: “CodeCommitPolicy”,
“Effect”: “Allow”,
“Action”: [
“codecommit:GitPull”
],
“Ressource”: [
“*”
]
},
{
“Sid”: “S3GetObjectPolicy”,
“Effect”: “Allow”,
“Action”: [
“s3:GetObject”,
“s3:GetObjectVersion”
],
“Ressource”: [
“*”
]
},
{
“Sid”: “S3PutObjectPolicy”,
“Effect”: “Allow”,
“Action”: [
“s3:PutObject”
],
“Ressource”: [
“*”
]
},
{
“Sid”: “ECRPullPolicy”,
“Effect”: “Allow”,
“Action”: [
“ecr:BatchCheckLayerAvailability”,
“ecr:GetDownloadUrlForLayer”,
“ecr:BatchGetImage”
],
“Ressource”: [
“*”
]
},
{
“Sid”: “ECRAuthPolicy”,
“Effect”: “Allow”,
“Action”: [
“ecr:GetAuthorizationToken”
],
“Ressource”: [
“*”
]
},
{
“Sid”: “S3BucketIdentity”,
“Effect”: “Allow”,
“Action”: [
“s3:GetBucketAcl”,
“s3:GetBucketLocation”
],
“Ressource”:
“*”
}
]
}

Fügen Sie diese in unter der Registerkarte “JSON” in der Gruppenrichtlinien-editor. Geben Sie einen Namen ein, und befestigen Sie es an der Rolle. Sie wollen auch zum befestigen der vorgefertigten Politik, AmazonEC2ContainerRegistryPowerUser.

Wenn diese beiden Richtlinien beigefügt sind, geben Sie der Rolle einen Namen und klicken Sie auf erstellen.

Konfigurieren der Source-Control und CodeBuild

CodePipeline unterstützt ziehen code-updates von GitHub, BitBucket, und der AWS-eigenen CodeCommit-source-control. Sie haben die beste Erfahrung mit CodeCommit als Sekundär-release-repository, aber GitHub funktionieren gut. Wenn Sie mit GitLab oder einem anderen Anbieter, müssen Sie mit CodeCommit push-updates.

Für diesen Schritt, werden Sie wollen, um zwei verschiedene repositories—für Ihre Basis-image, und eine für Ihre Anwendung Bild. Wenn Sie nicht über eine eigene Basis-image, können Sie überspringen Sie die Konfiguration für Sie.

Für die Basis-image, werden Sie wollen, erstellen Sie eine buildspec-Datei, die im wesentlichen eine Liste von Befehlen, die CodeBuild die ausgeführt wird, wenn Gebäude Bild. Können Sie diese manuell bei der Einrichtung CodeBuild, aber es ist besser, speichern Sie es als eine Datei namens buildspec.yml im root des repository.

Ihre genaue Konfiguration kann je nach den Anforderungen Ihrer Anwendung, aber es sollte in etwa so Aussehen:

version: 0.2

Phasen:
pre_build:
Befehle:
– echo der Anmeldung zu Amazon ECR…
– aws –version
– $(aws ecr-get-login –region $AWS_DEFAULT_REGION –no-zählen-E-Mail)
– REPOSITORY_URI=012345678910.dkr.ecr.us-east-1.amazonaws.com/base-image
– COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut-c 1-7)
– IMAGE_TAG=${COMMIT_HASH:=Letzte}
bauen:
Befehle:
– echo Bauen begann auf `Datum`
– echo-Gebäude der Docker-image…
– docker build-t $REPOSITORY_URI:neueste .
– docker-tag $REPOSITORY_URI:neueste $REPOSITORY_URI:$IMAGE_TAG
post_build:
Befehle:
– echo-Build abgeschlossen `date`
– echo Drücken Sie die Docker-images…
– docker push – $REPOSITORY_URI:neueste
– docker push – $REPOSITORY_URI:$IMAGE_TAG

In diesem Beispiel wird die log-in ECR, das Bild-tag, um die CodeBuild build-ID, erstellen Sie das Andockfenster Bild, dann schieben Sie die änderungen an Ihrer ECR-repository. Sie möchten, ändern Sie die REPOSITORY_URI Variablen-Deklaration die URI, die für Ihre Zielgruppe ECR-repository.

Speichern Sie diese als buildspec.yml, und legen Sie Sie in der Wurzel sowohl Ihre Basis-image-repository und application-image-repository. Sie können testen Sie Ihre buildspec, indem Sie manuell initiieren ein build aus der CodeBuild Konsole, oder gehen Sie einfach auf die pipeline-setup und korrigieren Sie alle Fehler, die entstehen können.

Einrichten der Pipeline

Sobald Sie haben Ihre buildspec in Ordnung, öffnen Sie die CodePipeline Konsole, und erstellen Sie eine neue pipeline für die Basis-image. Geben Sie einen Namen ein, und lassen Sie es erstellen Sie eine neue service-Rolle. Für die source-control-Bühne, wählen Sie den Typ, den Sie verwenden, und wählen Sie einen repository-und branch. Wenn Sie möchten, können Sie einrichten, eine weitere Niederlassung zu verfolgen releases, und CodePipeline ignorieren, die Veränderungen zu meistern.

Für die build-Phase, wählen Sie “Projekt Erstellen.” Dadurch öffnet sich ein Dialogfeld, in dem Sie konfigurieren können, CodeBuild.

Normalerweise müssten Sie den link CodeBuild zu Ihrer Quelle kontrollieren, aber das erfolgt automatisch durch die pipeline beim erstellen eines neuen Projekts auf diese Weise. Sie müssen konfigurieren Sie die Umgebung, Ihre build-Läufe in—Sie können einen benutzerdefinierten Andockfenster Bild, geladen mit allen erforderlichen Programmen für den Aufbau, oder Sie können installieren Sie diese manuell in die fertige phase Ihres buildspec.yml. Wenn Sie nicht brauchen etwas besonderes, Sie können wählen Sie Amazon Linux 2 und die Standard-runtime, die kommt mit den meisten Programmiersprache Laufzeiten sowie Andockfenster vorinstalliert.

Sie werden auch wollen, wählen Sie die service-Rolle, die Sie zuvor erstellt haben:

Schließlich können Sie manuell ändern Sie den Namen des buildspec-Datei, wenn Sie nicht wollen, dass es in das root-Verzeichnis Ihres source-oder mehrere Dateien, die Sie benötigen, um zwischen zu unterscheiden. Sie können auch insert-Befehle zum erstellen von manuell hier, aber wir beraten tracking als Datei auf git.

Für die Bereitstellung der Bühne, werden Sie wollen, um es zu überspringen, für die Basis-image. Die buildspec-Datei erstellen und push die änderungen ECR, das ist alles, was Sie brauchen für diesen Schritt. Testen kann man die pipeline durch das drücken von änderungen, um Ihre Basis-image-repository.

Einrichten der Anwendung Image-Pipeline

Als Nächstes richten Sie eine zusätzliche Leitung für Ihre Anwendung Bild. Erstellen Sie eine neue pipeline von der Konsole, und wählen Sie “ECR” als Quelle. Wählen Sie Ihre Basis-image-repository, und lassen Sie das image-tag leer ist, wird standardmäßig auf die Letzte.

Für die build-Phase, werden Sie konfigurieren möchten CodeBuild in viel die gleiche Weise wie die Basis-image-Phase—erstellen Sie ein neues Projekt erstellen, wählen Sie die Standard-Umgebung aus, und geben Sie in die service-Rolle, die Sie zuvor erstellt haben.

Der deployment-Phase ist optional. Ohne änderungen an der Basis-Bild oder Anwendung Bild wird einfach auslösen der Anwendung image neu erstellen und drücken Sie die änderungen zu ECR. Allerdings,, wenn Sie Verwendung von ECS für die Bereitstellung, Sie können hinzufügen, ein weiteres Stadium, das Ihre gebaut Bild und Aktualisierung von Servern.

So oder so, klicken Sie auf erstellen, um die pipeline. Einige änderungen sind erforderlich, bevor, wird es aber funktionieren, so klicken Sie auf “Bearbeiten” in der pipeline”, dann “Bearbeiten ” Bühne” für die source-control-Phase:

So wie es da steht, das source-control-Bühne zieht einfach von ECR für die Basis-image. Dies ist notwendig, aber es muss auch die Anwendung code, etwas nützliches zu tun und reagieren auch auf Veränderungen in den Anwendungs-code (nicht nur der base Bild).

Klicken Sie Auf “Aktion Hinzufügen:”

Wählen Sie CodeCommit (oder andere source-control) als der action-Typ, und wählen Sie das repository-und branch. Für “Output-Artefakte” sind, Sie werden wollen geben Sie in SourceArtifact, um anzuzeigen, dass dies ist der Quellcode der Anwendung.

Sie wollen auch zum Bearbeiten der ECR-Phase, um anzugeben, dass die Ausgabe-Artefakt ist eine Basis-Image.

Dies sollte alle, die CodeBuild laufen muss, und wenn Sie aktualisieren Sie Ihre pipeline, sollte er wieder laufen, hoffentlich ohne Fehler.

Wenn Sie Fehler auftreten, ist es wahrscheinlich, dass Ihr buildspec für CodeBuild nicht richtig funktioniert. Sie können die build-Protokolle aus der CodeBuild Verwaltungskonsole, oder wenden Sie sich für AWS Build-Spezifikation Referenz für mehr info auf, wie alles funktioniert.