Het automatiseren van Continue Levering in Containers met CodeBuild, ECR, en CodeDeploy

0
305
Shutterstock/Ribkhan

Continuous Integration en Continuous Delivery (CI/CD) is het proces van het automatiseren van applicatie-updates, van veranderingen in versiebeheer, geautomatiseerde builds, geautomatiseerde installaties naar uw servers. AWS biedt een service, genaamd CodePipeline, die kan worden geconfigureerd om te werken met containers.

Continue Levering in Containers

Containers zijn een beetje ingewikkelder dan de traditionele toepassingen. Vele container-toepassingen daadwerkelijk gebruik maken van twee container beelden. De eerste, de zogenaamde base beeld, is in wezen een aangepaste AMI geleverd met afhankelijkheden en andere toepassingen. Dit is gedaan om de snelheid van bouwen keer, want als je gewoon het bijwerken van uw aanvraag code, je hoeft niet te gaan het opnieuw installeren van NGINX en elk ander stukje software op de verpakking. De tweede afbeelding is de werkelijke toepassing van het beeld, dat strekt zich uit van de basis afbeelding en bevat uw eigen code.

Als zodanig, de CI/CD-pijpleiding, die we eigenlijk twee pijpleidingen. De eerste zal kijken naar veranderingen in de base image en leiden tot een revisie en update to ECR wanneer het gebeurt. De tweede pijplijn zitten er twee bron-fasen—one horloges voor wijzigingen in de basis afbeelding van de ECR-archief, en één die luistert naar updates in de toepassing image source code. Op deze manier, als je gewoon het bijwerken van de toepassing image, de base image hoeft niet opnieuw te bouwen.

Met twee pijpleidingen, CodePipeline zal leiden tot applicatie-updates in een van twee manieren:

  • Wijzigingen aan de image van de toepassing zal leiden tot een wederopbouw van de image van de toepassing, het gebruik van de nieuwste base beeld, dat niet hoeft te worden opgebouwd. De update zal worden geduwd aan de KASSA, met optionele implementatie naar ECS of een andere container service.
  • Wijzigingen aan de base beeld, zal leiden tot een wederopbouw van de base beeld, zal het implementeren van de updates aan de KASSA. Dit zal op zijn beurt leiden tot een wederopbouw van de image van de toepassing, die zal worden geduwd aan de KASSA en vervolgens naar ECS.

Echter, deze dual-pijpleiding installatie misschien niet nodig door alle toepassingen, en als je gewoon met behulp van een vooraf opgestelde base-installatiekopie van het BESTURINGSSYSTEEM zoals Ubuntu, je hoeft alleen maar een pijplijn om alles te verwerken.

IAM Rol Setup

Ten eerste, u hebt voor het instellen van een service-rol te geven CodeBuild de machtigingen die noodzakelijk zijn om te communiceren met andere AWS diensten (zoals ECR) op uw rekening. Open de IAM Management Console, maak dan een nieuwe rol onder de “Rollen.” Kies “AWS-Service”, en selecteer CodeBuild in de lijst.

Voor het beleid, zult u wilt maken van een nieuw beleid met de volgende machtigingen heeft:

{
“Versie”: “2012-10-17”,
“Verklaring”: [
{
“Sid”: “CloudWatchLogsPolicy”,
“Effect”: “Toestaan”,
“Actie”: [
de “logs:CreateLogGroup”,
de “logs:CreateLogStream”,
de “logs:PutLogEvents”
],
“Bron”: [
“*”
]
},
{
“Sid”: “CodeCommitPolicy”,
“Effect”: “Toestaan”,
“Actie”: [
“codecommit:GitPull”
],
“Bron”: [
“*”
]
},
{
“Sid”: “S3GetObjectPolicy”,
“Effect”: “Toestaan”,
“Actie”: [
“s3:GetObject”,
“s3:GetObjectVersion”
],
“Bron”: [
“*”
]
},
{
“Sid”: “S3PutObjectPolicy”,
“Effect”: “Toestaan”,
“Actie”: [
“s3:PutObject”
],
“Bron”: [
“*”
]
},
{
“Sid”: “ECRPullPolicy”,
“Effect”: “Toestaan”,
“Actie”: [
“ecr:BatchCheckLayerAvailability”,
“ecr:GetDownloadUrlForLayer”,
“ecr:BatchGetImage”
],
“Bron”: [
“*”
]
},
{
“Sid”: “ECRAuthPolicy”,
“Effect”: “Toestaan”,
“Actie”: [
“ecr:GetAuthorizationToken”
],
“Bron”: [
“*”
]
},
{
“Sid”: “S3BucketIdentity”,
“Effect”: “Toestaan”,
“Actie”: [
“s3:GetBucketAcl”,
“s3:GetBucketLocation”
],
“Bron”:
“*”
}
]
}

Plak dit in onder de JSON-tabblad in de groepsbeleid-editor. Geef het een naam, en bevestig het op de rol. U zult ook willen aansluiten op de eerder gemaakte beleid, AmazonEC2ContainerRegistryPowerUser.

Zodra deze twee het beleid aan verbonden zijn, geven de rol van een naam en klik op maken.

Het configureren van Source Control en CodeBuild

CodePipeline ondersteunt trekken code updates van GitHub, BitBucket, en AWS eigen CodeCommit source control. U zult de beste ervaring met CodeCommit als een secundaire release archief, maar GitHub zullen gewoon prima werken. Als u GitLab of een andere provider, moet u gebruik maken van CodeCommit te duwen updates.

Voor deze stap, die u zult willen hebben twee verschillende repositories voor uw base beeld, en een voor uw toepassing beeld. Als je niet met behulp van een custom base beeld, kunt u de configuratie voor.

Voor de base beeld, zal u wilt om het maken van een buildspec bestand, in feite een lijst van commando ‘ s die CodeBuild zal uitvoeren bij het opbouwen van uw imago. Kunt u deze handmatig invoeren bij het instellen van CodeBuild, maar het is beter om het op te slaan als een bestand genaamd buildspec.yml in de root van je archief.

Uw exacte configuratie kan variëren afhankelijk van uw applicatie-eisen, maar het moet er als volgt uitzien:

versie: 0.2

fasen:
pre_build:
commando ‘ s:
– echo in te Loggen op Amazon KASSA…
– aws –versie
– $(aws ecr krijgen-login –regio $AWS_DEFAULT_REGION –no-zijn-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:=laatste}
bouwen:
commando ‘ s:
– echo Bouw begon op `datum`
– echo-Gebouw in het Koppelvenster beeld…
– docker bouwen -t $REPOSITORY_URI:laatste .
– docker tag $REPOSITORY_URI:laatste $REPOSITORY_URI:$IMAGE_TAG
post_build:
commando ‘ s:
– echo Build voltooid op `datum`
– echo te Duwen in het Koppelvenster beelden…
– docker push $REPOSITORY_URI:laatste
– docker push $REPOSITORY_URI:$IMAGE_TAG

Dit voorbeeld zal de log in op JURISPRUDENTIE, stellen de image tag om de CodeBuild build-ID, het bouwen van de Docker afbeelding, druk dan op de wijzigingen in uw KASSA-gegevensopslagruimte. Je wilt wijzigen van de REPOSITORY_URI declaratie van de variabele om de URI van uw doelgroep ECR-gegevensopslagruimte.

Opslaan als buildspec.yml, en plaats deze in de root van zowel de base image repository en de toepassing image repository. U kunt testen of uw buildspec door het handmatig starten van een build van de CodeBuild console, of gewoon verder te gaan naar de pijpleiding installatie en het herstellen van eventuele fouten die zich kunnen voordoen.

Het instellen van de Pijplijn

Als u eenmaal uw buildspec om, open de CodePipeline Console, en het maken van een nieuwe pijpleiding voor de basis-beeld. Geef het een naam, en laat het maken van een nieuwe service rol. Voor de bron-control fase kiest u het type die je gebruikt, en selecteer een archief en gemeente. Als u dat wilt, kunt u een extra tak te volgen releases, en CodePipeline zal negeren veranderingen te beheersen.

Voor het bouwen van het podium, selecteer dan “Project.” Dit zal een dialoogvenster waarin u kunt configureren CodeBuild.

Normaal gesproken, zou u hebben om een koppeling te CodeBuild uw bron voor de controle, maar dat is afgehandeld door de pijpleiding bij het aanmaken van een nieuw project op deze manier. Je moet de omgeving configureren uw op te bouwen, draait het in—u kunt kiezen voor een aangepaste Docker beeld, geladen met alle benodigde programma ‘ s om te bouwen, of u kunt ze handmatig installeren in de voorbereidende build maken van fase van uw buildspec.yml. Als je het niet nodig iets speciaals, kunt u kiezen Amazon Linux 2 en de standaard runtime, die wordt geleverd met de meeste programmeer taal runtimes evenals Docker vooraf is geïnstalleerd.

U zult ook willen selecteer de rol die u eerder hebt gemaakt:

Ten slotte, u kunt handmatig wijzigen van de naam van de buildspec bestand, als u niet wilt dat deze in de root directory van uw bron of meerdere bestanden die u nodig hebt om onderscheid te maken tussen. U kunt ook tekst invoegen bouwen opdrachten hier handmatig, maar wij adviseren het bijhouden van een bestand op git.

Voor het implementeren van het podium, zult u wilt om het te slaan voor de basis-beeld. De buildspec bestand zal bouwen en van push-wijzigingen aan de KASSA, dat is alles wat je nodig hebt voor deze stap. U kunt de test van de pijpleiding door te drukken wijzigingen aan uw base image repository.

Het instellen van de Toepassing Beeld Pijplijn

Vervolgens zult u een extra pijpleiding voor uw toepassing beeld. Het maken van een nieuwe pijpleiding van de console, en selecteer “KASSA” als bron. Selecteer uw base image repository, en laat de image tag leeg, dat wordt standaard het laatste.

Voor het bouwen van het podium, zult u wilt configureren CodeBuild op vrijwel dezelfde manier als de base image fase—het maken van een nieuwbouw project, selecteert u het standaard milieu en voer de service-rol die u eerder hebt gemaakt.

De implementatie fase is optioneel. Zonder deze veranderingen aan de basis afbeelding of de toepassing image gewoon zal leiden tot de toepassing image op te bouwen en van push-wijzigingen aan de KASSA. Echter, als u ECS voor implementatie, kunt u het toevoegen van een andere fase, die zal uw gebouwd beeld en bijwerken van uw servers.

Één van beide manier, klik op maken om de pijplijn. Sommige veranderingen zijn nodig voordat het werkt wel, dus klik op “Edit” op de leiding, dan op “Edit Podium” voor de source control fase:

Zoals het staat, de bron controle fase gewoon trekt van de KASSA voor de basis-beeld. Dit is noodzakelijk, maar moet ook de code van de toepassing te doen wat nuttig en ook reageren op veranderingen in de code van de toepassing (niet alleen de basis afbeelding).

Klik Op “Add Actie:”

Kies CodeCommit (of andere bron control) als de action type, en selecteer je de repository en de gemeente. Voor “Output Artefacten,” je wilt invoeren in SourceArtifact om aan te geven dat dit de toepassing van de broncode.

U zult ook willen om het bewerken van de JURISPRUDENTIE podium te geven dat de uitvoer artefact is een Basis Afbeelding.

Dit moet alles dat CodeBuild moet uitvoeren, en zodra u een update van uw pijplijn, het moet opnieuw uit te voeren, hopelijk zonder fouten.

Als u fouten krijgt, is de kans groot dat uw buildspec voor CodeBuild niet goed werkt. U kunt de bouw van de logboeken CodeBuild console of neem contact op met AWS het Bouwen van Specificatie Reference voor meer info over hoe het allemaal werkt.