Blog
Wie man serverlose CI/CD-Pipelines für Docker-Images mit AWS erstellt

Wenn Sie sich AWS-Services wie CodeBuild, CodeCommit, CodePipeline und ECR ansehen, könnten Sie denken, dass es sehr einfach ist,
eine einfache CI/CD-Build-Pipeline für ein Docker-Image zu erstellen. Aber das ist es nicht. In diesem Blog stellen wir eine CloudFormation
Vorlage vor, die eine serverlose CI/CD-Pipeline für Docker-Images erstellt. Mit der Vorlage können Sie CI/CD-Pipelines
für Docker-Images in wenigen Minuten erstellen!
Wie kann ich das tun?
Es ist ganz einfach: Sie müssen nur die CloudFormation-Vorlage herunterladen:
git clone https://github.com/binxio/blog-serverless-ci-cd-of-docker-images-with-aws.git
cd blog-serverless-ci-cd-of-docker-images-with-aws
und setzen Sie es ein:
aws --region eu-central-1
cloudformation create-stack
--stack-name paas-monitor-ci-cd
--template-body file://./serverless-docker-image-ci-cd.yaml
--capabilities CAPABILITIES_IAM
aws cloudformation wait stack-create-complete --stack-name paas-monitor-ci-cd
Dies erstellt:
* ein Git-Repository mit dem Namen paas-monitor
* ein Docker-Image-Repository mit dem Namen mvanholsteijn/paas-monitor
* ein Build-Projekt mit dem Namen paas-monitor
* eine IAM-Richtlinie, die den Zugriff auf das Build-Projekt kontrolliert
* ein Lambda, das Builds bei Repository-Commits startet
Klonen eines Quell-Repositorys
Um dies in Aktion zu sehen, brauchen Sie etwas zum Bauen, wie unseren paas-Monitor.
git clone https://github.com/mvanholsteijn/paas-monitor.git
cd paas-monitor
In diesem Repository finden Sie eine .buildspec.yaml, die CodeBuild
mitteilt, wie dieses Image erstellt werden soll. Sie sieht wie folgt aus:
version: 0.2
phases:
install:
runtime-versions:
docker: 18
golang: 1.12
build:
commands:
- aws ecr get-login --no-include-email | sh
- make REGISTRY_HOST=${REGISTRY_HOST} snapshot
Wie Sie sehen können, verwenden wir make, um einen portablen Build-Prozess zu erhalten, der sowohl lokal als auch auf verschiedenen CI-Servern läuft.
Installation des Git Remote Helper
Bevor Sie dies pushen können, müssen Sie den git remote helper für CodeCommit installieren, der es Ihnen ermöglicht, mit Ihren AWS-Anmeldedaten zu pushen: Keine ssh-Schlüssel erforderlich!
pip install git-remote-codecommit
Dieser Remote-Helfer wird aufgerufen, wenn Sie codecommit als Protokoll in der git
Repository-URL im folgenden Format verwenden: codecommit:<profile>/<name>. Dabei ist profile das AWS-Profil, das die zu verwendenden Anmeldeinformationen enthält, und name der Name des gewünschten Repositorys.
zu CodeCommit schieben
Jetzt können Sie das Git-Repository in das CodeCommit-Repository übertragen:
git remote add aws codecommit:${AWS_PROFILE:-default}/paas-monitor
git push aws --tags
git push aws
Dadurch wird der Build-Prozess gestartet. Um den Fortschritt zu sehen, rufen Sie die

wiederverwenden
Wenn Sie diese Vorlage für Ihre eigenen Build-Pipelines wiederverwenden möchten, geben Sie bei der Erstellung des Stacks
einfach den Namen Ihres Repositorys und Ihren Benutzer an:
read -p 'repository name: ' REPOSITORY_NAME
read -p 'repository user: ' REPOSITORY_USER
aws cloudformation create-stack
--stack-name ${REPOSITORY_NAME}-ci-cd
--template-body file://./serverless-docker-image-ci-cd.yaml
--capabilities CAPABILITIES_IAM
--parameters ParameterKey=RepositoryName,ParameterValue=${REPOSITORY_NAME}
ParameterKey=RepositoryUser,ParameterValue=${REPOSITORY_USER}
Fazit
Mit dieser CloudFormation-Vorlage haben wir AWS CodeBuild, CodeCommit, Lambda und ECR kombiniert, um eine serverlose CI/CD-Pipeline für Docker-Images zu erstellen.
Dieselbe Vorlage kann wiederverwendet werden, um Pipelines für andere Images zu erstellen. Es können Varianten der Vorlage erstellt werden, um andere Artefakte auf der Grundlage eines Git-Repositorys
zu erstellen oder Dinge bei AWS bereitzustellen. Es ist nicht einfach, aber es ist komplett serverlos!
Verfasst von

Mark van Holsteijn
Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.
Unsere Ideen
Weitere Blogs
Contact



