Automatisera Kontinuerlig Leverans i Behållare med CodeBuild, REG, och CodeDeploy

0
206
Shutterstock/Ribkhan

Continuous Integration och Continuous Delivery (CL/CD) är processen för att automatisera uppdateringar, från förändringar i källkontroll, att automatiska byggen, för automatiserade installationer till dina servrar. AWS erbjuder en tjänst för detta, som kallas CodePipeline, som kan konfigureras för att fungera med behållare.

Kontinuerlig Leverans i Behållare

Behållarna är lite mer komplicerat än traditionella program. Många containrar program faktiskt kommer att använda sig av två behållare bilder. Den första, som kallas bas bilden, är i huvudsak en anpassad AMI förladdad med beroenden och andra program. Detta görs för att påskynda bygga gånger, för om du bara uppdaterar din ansökan kod, behöver du inte att gå att installera NGINX och varje annan bit av programvara på behållaren. Den andra bilden är den faktiska tillämpningen bild, som sträcker sig basen bild och innehåller din egen kod.

Som sådan, CI:/CD pipeline som vi kommer att ställa upp faktiskt kommer att vara två rörledningarna. Den första kommer att titta på förändringar i basen bilden och utlösa en ombyggnad och uppdatering till ECR-när det händer. Den andra rörledningen kommer att innehålla två källa skeden—en som klockor för förändringar i basen bilden är REG arkiv, och en som lyssnar efter uppdateringar i programmet image source-kod. Detta sätt, om du bara uppdatera programmet bild, bas bilden inte behöver ombyggnad.

Med två rörledningarna, CodePipeline kommer att utlösa tillämpning uppdateringar på ett av två sätt:

  • Ändringar i programmet-bild kommer att utlösa en ombyggnad av ansökan bild, med den senaste basen bilden, som inte behöver byggas om. Uppdateringen kommer att skjutas till REG, med valfri distribution till ECS eller annan container service.
  • Förändringar till base bilden kommer att utlösa en ombyggnad av bas-bild, som kommer att distribuera uppdateringar till REG. Detta kommer i sin tur utlöser en ombyggnad av programmet-bild, som kommer att skjutas till ECR och sedan till ECS.

Men denna dubbel-pipeline setup kanske inte behövs av alla program, och om du bara använder ett förkompilerat bas OS-bild som Ubuntu, du behöver bara en rörledning för att hantera allt.

IAM Roll Setup

Först, du måste sätta upp en tjänst roll för att ge CodeBuild de behörigheter som krävs för att interagera med andra AWS-tjänster (som ECR) på din räkning. Öppna upp IAM Management Console, och sedan skapa en ny roll under “Roller.” Välj “AWS Service” och välj CodeBuild i listan.

För den politik som du vill skapa en ny politik med följande behörigheter:

{
“Version”: “2012-10-17”,
Förklaring: [
{
“Sid”: “CloudWatchLogsPolicy”,
“Effect”: “Tillåt”,
“Action”: [
“loggar:CreateLogGroup”,
“loggar:CreateLogStream”,
“loggar:PutLogEvents”
],
“Resurs”: [
“*”
]
},
{
“Sid”: “CodeCommitPolicy”,
“Effect”: “Tillåt”,
“Action”: [
“codecommit:GitPull”
],
“Resurs”: [
“*”
]
},
{
“Sid”: “S3GetObjectPolicy”,
“Effect”: “Tillåt”,
“Action”: [
“s3:GetObject”,
“s3:GetObjectVersion”
],
“Resurs”: [
“*”
]
},
{
“Sid”: “S3PutObjectPolicy”,
“Effect”: “Tillåt”,
“Action”: [
“s3:PutObject”
],
“Resurs”: [
“*”
]
},
{
“Sid”: “ECRPullPolicy”,
“Effect”: “Tillåt”,
“Action”: [
“reg:BatchCheckLayerAvailability”,
“reg:GetDownloadUrlForLayer”,
“reg:BatchGetImage”
],
“Resurs”: [
“*”
]
},
{
“Sid”: “ECRAuthPolicy”,
“Effect”: “Tillåt”,
“Action”: [
“reg:GetAuthorizationToken”
],
“Resurs”: [
“*”
]
},
{
“Sid”: “S3BucketIdentity”,
“Effect”: “Tillåt”,
“Action”: [
“s3:GetBucketAcl”,
“s3:GetBucketLocation”
],
“Resurs”:
“*”
}
]
}

Klistra in detta i enlighet med JSON-fliken i den politiska redaktör. Ge den ett namn, och bifoga den till rollen. Du kommer också vill bifoga premade politik, AmazonEC2ContainerRegistryPowerUser.

När dessa två principer är monterade, ge den roll ett namn och klicka på skapa.

Konfigurera Källan Kontroll och CodeBuild

CodePipeline stödjer dra-kod uppdateringar från GitHub, BitBucket, och AWS: s egna CodeCommit källa kontroll. Du kommer att ha den bästa upplevelsen med CodeCommit som en sekundär släppa förrådet, men GitHub kommer att fungera alldeles utmärkt. Om du använder GitLab eller en annan leverantör, måste du använda CodeCommit att push-uppdateringar.

För detta steg är, att du vill ha två olika arkiv—en för din bas bilden, och en till din ansökan bilden. Om du inte använder en egen bas bild, du kan hoppa över konfiguration för det.

För basen bild du vill skapa en buildspec fil, i huvudsak en lista över kommandon som CodeBuild kommer att utföra när du bygger din bild. Du kan ange detta i manuellt när du ställer upp CodeBuild, men det är bättre att spara det som en fil som heter buildspec.yml i roten av ditt arkiv.

Din exakta konfigurationen kan variera beroende på din ansökan kraven, men det bör se ut ungefär så här:

version: 0.2

faser:
pre_build:
kommandon:
– echo Avverkning i Amazonas REG…
– aws –version
– $(aws ecr-få-login –region $AWS_DEFAULT_REGION –ingen-har-e-post)
– 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:=senaste}
bygga:
kommandon:
– echo Bygga började på “date”
– eko-Byggnaden Docker bild…
– docker bygga -t $REPOSITORY_URI:senaste .
– docker tag $REPOSITORY_URI:senaste $REPOSITORY_URI:$IMAGE_TAG
post_build:
kommandon:
– echo Bygga klar på “date”
– echo Driver Docker bilder…
– docker push $REPOSITORY_URI:senaste
– docker push $REPOSITORY_URI:$IMAGE_TAG

Detta exempel kommer att logga in på REG, ställa in bilden tag till CodeBuild bygga ID, bygga Docker bild, tryck sedan ändringar i din REG-arkiv. Du kommer att vilja ändra REPOSITORY_URI variabel förklaring till att URI ditt mål REG arkiv.

Spara detta som buildspec.yml, och placera den i roten på både din bas bild arkiv och tillämpning bild-arkivet. Du kan testa din buildspec genom att manuellt initiera en build från CodeBuild konsolen, eller bara gå vidare till ledningen setup och åtgärda eventuella fel som kan uppstå.

Att sätta Upp ledningen

När du har fått din buildspec i ordning, öppna upp CodePipeline Konsolen, och skapa en ny rörledning för basen bilden. Ge den ett namn, och låt det skapa en ny roll. För källkontroll skede, välj den typ som du använder, och välj ett förråd och filialer. Om du vill kan du ställa in en extra gren för att spåra utgåvor, och CodePipeline kommer att ignorera ändringar master.

För att bygga scenen, välj “Skapa Projekt”. Detta kommer att ta upp en dialogruta där du kan konfigurera CodeBuild.

Normalt skulle du ha för att länka CodeBuild att din källa kontroll, men som hanteras automatiskt av rörledningen när du skapar ett nytt projekt på detta sätt. Du måste konfigurera din miljö bygg kör på—du kan välja en anpassad Docker bild, laddade med alla nödvändiga program för att bygga, eller du kan installera dem manuellt i förkompilerade fas av ditt buildspec.yml. Om du inte behöver något speciellt, så kan du välja Amazon Linux 2 och standard-runtime, som kommer med de flesta programmeringsspråk drifttider samt Docker förinstallerat.

Du kommer också vill välja den service roll som du skapade tidigare:

Slutligen, du kan manuellt ändra namnet på buildspec filen, om du inte vill ha den i rotkatalogen för din källa eller flera filer du behöver för att skilja mellan. Du kan också infoga bygga kommandon manuellt här, men vi rekommenderar att spåra den som en fil på git.

För att distribuera scenen, du vill hoppa över det för basen bilden. Den buildspec filen kommer att bygga och driva förändringar REG, som är allt du behöver för detta steg. Du kan testa pipeline genom att trycka förändringar till din bas bild-arkivet.

Inrätta Ansökan Bild Pipeline

Nästa, du ska ställa upp en extra gång för din ansökan bilden. Skapa en ny pipeline från konsolen och välj “REG” som källa. Välj din bas bild-arkivet, och lämna bilden tag tomma, som kommer som standard det senaste.

För att bygga scenen, du vill konfigurera CodeBuild på ungefär samma sätt som bas bilden steg—skapa ett nytt bygga projekt, välj standard miljö, och retur i tjänsten roll som du skapade tidigare.

Utbyggnaden steg är valfritt. Utan det, förändringar i basen bild eller ansökan bilden kommer helt enkelt att utlösa tillämpning bilden för att bygga och driva förändringar till REG. Dock, om du använder ECS för distribution, kan du lägga till en annan fas som kommer att ta din byggt bild och uppdatera dina servrar.

Antingen sätt, klicka på skapa för att göra ledningen. Vissa förändringar är nödvändiga innan det kommer att fungera om, så klicka på “Redigera” på gång, och sedan “Redigera Scenen” för källkontroll steg:

Som det står, källa kontroll scenen helt enkelt drar från ECR för bas bilden. Detta är nödvändigt, men det måste även program-kod för att göra något användbart och även reagera på förändringar i programkoden (inte bara basen bilden).

Klicka På “Lägg Till Åtgärd:”

Välj CodeCommit (eller annan källa kontroll) som en typ av åtgärd, och välj ditt arkiv och gren. För “Output Artefakter,” vill du gå in i SourceArtifact för att beteckna att detta är programmets källkod.

Du kommer också vill redigera ECR scenen för att ange att produktionen artefakt är en Bas Bilden.

Detta bör vara alla som CodeBuild behov att köra, och när du uppdaterar din pipeline, det ska köras igen, förhoppningsvis utan fel.

Om du stöter på fel, är det troligt att din buildspec för CodeBuild inte fungerar korrekt. Du kan visa att bygga loggar från CodeBuild konsolen, eller kontakta AWS Bygga Specifikation Referens för mer info om hur det hela fungerar.