(INAKTUELL) Fullständig CI/CD-pipeline för att distribuera ett program med flera containrar i Azure Container Service med Docker Swarm med Hjälp av Azure DevOps Services

Varning

Azure Container Service (ACS) är inaktuell. Inga nya funktioner läggs till i ACS. Alla API:er, portalen, CLI-kommandon och dokumentationen är markerade som inaktuella.

Mer information finns i utfasningsmeddelandet för Azure Container Service på Azure.com.

Vi rekommenderar att du distribuerar någon av följande Azure Marketplace lösningar:

Om du vill använda Kubernetes läser du Azure Kubernetes Service.

En av de största utmaningarna när du utvecklar moderna program för molnet är att kunna leverera dessa program kontinuerligt. I den här artikeln får du lära dig hur du implementerar en pipeline för fullständig kontinuerlig integrering och distribution (CI/CD) med Hjälp av Azure Container Service med Docker Swarm, Azure Container Registry och Azure Pipelines.

MyShop-exempelprogram

Målet är att leverera det här programmet kontinuerligt i ett Docker Swarm-kluster med hjälp av Azure DevOps Services. Följande bild beskriver den här pipelinen för kontinuerlig leverans:

MyShop-exempelprogram

Här är en kort förklaring av stegen:

  1. Kodändringar checkas in på källkodslagringsplatsen (här GitHub)
  2. GitHub utlöser en version i Azure DevOps Services
  3. Azure DevOps Services hämtar den senaste versionen av källorna och skapar alla avbildningar som utgör programmet
  4. Azure DevOps Services push-överför varje avbildning till ett Docker-register som skapats med hjälp av Azure Container Registry-tjänsten
  5. Azure DevOps Services utlöser en ny version
  6. Versionen kör vissa kommandon med hjälp av SSH på huvudnoden för Azure Container Service-klustret
  7. Docker Swarm i klustret hämtar den senaste versionen av avbildningarna
  8. Den nya versionen av programmet distribueras med Docker Compose

Förutsättningar

Innan du påbörjar den här självstudien måste du utföra följande uppgifter:

Anteckning

Docker Swarm Orchestrator i Azure Container Service använder äldre fristående versionen av Swarm. Det integrerade Swarm-läget (i Docker 1.12 och senare) är inte en orchestrator som stöds i Azure Container Service. Om du vill distribuera ett Swarm-lägeskluster i Azure använder du ACS Engine (öppen källkod), en snabbstartsmall (från communityn) eller en Docker-lösning på Azure Marketplace.

Du behöver också en Ubuntu-dator (14.04 eller 16.04) med Docker installerat. Den här datorn används av Azure DevOps Services under Azure Pipelines-processerna. Ett sätt att skapa den här datorn är att använda avbildningen som är tillgänglig i Azure Marketplace.

Steg 1: Konfigurera din Azure DevOps Services-organisation

I det här avsnittet konfigurerar du din Azure DevOps Services-organisation.

Konfigurera en Azure DevOps Services Linux-byggagent

Om du vill skapa Docker-avbildningar och push-överföra avbildningarna till ett Azure-containerregister från en Azure DevOps Services-version måste du registrera en Linux-agent. Du har följande installationsalternativ:

Installera Tillägget Docker Integration Azure DevOps Services

Microsoft tillhandahåller ett Azure DevOps Services-tillägg för att arbeta med Docker i Azure Pipelines-processer. Det här tillägget är tillgängligt på Azure DevOps Services Marketplace. Klicka på Installera för att lägga till det här tillägget i din Azure DevOps Services-organisation:

Installera Docker-integreringen

Du uppmanas att ansluta till din Azure DevOps Services-organisation med dina autentiseringsuppgifter.

Ansluta Azure DevOps Services och GitHub

Konfigurera en anslutning mellan ditt Azure DevOps Services-projekt och ditt GitHub-konto.

  1. I Azure DevOps Services-projektet klickar du på ikonen Inställningar i verktygsfältet och väljer Tjänster.

    Azure DevOps Services – extern anslutning

  2. Till vänster klickar du påGitHub för ny tjänstslutpunkt>.

    Azure DevOps Services – GitHub

  3. Om du vill ge Azure DevOps Services behörighet att arbeta med ditt GitHub-konto klickar du på Auktorisera och följer proceduren i fönstret som öppnas.

    Azure DevOps Services – Auktorisera GitHub

Ansluta Azure DevOps Services till ditt Azure-containerregister och Azure Container Service-kluster

De sista stegen innan du kommer in i CI/CD-pipelinen är att konfigurera externa anslutningar till containerregistret och Docker Swarm-klustret i Azure.

  1. I tjänstinställningarna för ditt Azure DevOps Services-projekt lägger du till en tjänstslutpunkt av typen Docker Registry.

  2. I popup-fönstret som öppnas anger du URL:en och autentiseringsuppgifterna för ditt Azure-containerregister.

    Azure DevOps Services – Docker Registry

  3. För Docker Swarm-klustret lägger du till en slutpunkt av typen SSH. Ange sedan SSH-anslutningsinformationen för Swarm-klustret.

    Azure DevOps Services – SSH

All konfiguration är klar nu. I nästa steg skapar du CI/CD-pipelinen som skapar och distribuerar programmet till Docker Swarm-klustret.

Steg 2: Skapa bygg-pipelinen

I det här steget konfigurerar du en bygg-pipeline för ditt Azure DevOps Services-projekt och definierar byggarbetsflödet för dina containeravbildningar

Inledande pipelinekonfiguration

  1. Om du vill skapa en bygg-pipeline ansluter du till ditt Azure DevOps Services-projekt och klickar på Skapa & version.

  2. I avsnittet Build definitions (Byggdefinitioner ) klickar du på + Ny. Välj mallen Tom .

    Azure DevOps – ny bygg-pipeline

  3. Konfigurera den nya versionen med en GitHub-lagringsplatskälla, kontrollera Kontinuerlig integrering och välj den agentkö där du registrerade din Linux-agent. Klicka på Skapa för att skapa bygg-pipelinen.

    Azure DevOps Services – Skapa bygg-pipeline

  4. På sidan Build Definitions (Byggdefinitioner ) öppnar du först fliken Lagringsplats och konfigurerar versionen så att den använder förgreningen av MyShop-projektet som du skapade i förutsättningarna. Se till att du väljer acs-docs som standardgren.

    Azure DevOps Services – Skapa lagringsplatskonfiguration

  5. På fliken Utlösare konfigurerar du bygget så att det utlöses efter varje incheckning. Välj Kontinuerlig integrering och Batch-ändringar.

    Azure DevOps Services – Konfiguration av byggutlösare

Definiera byggarbetsflödet

Nästa steg definierar byggarbetsflödet. Det finns fem containeravbildningar att skapa för MyShop-programmet . Varje avbildning skapas med hjälp av Dockerfile som finns i projektmapparna:

  • ProductsApi
  • Proxy
  • RatingsApi
  • RekommendationerApi
  • ShopFront

Du måste lägga till två Docker-steg för varje avbildning, ett för att skapa avbildningen och ett för att push-överföra avbildningen i Azure-containerregistret.

  1. Om du vill lägga till ett steg i byggarbetsflödet klickar du på + Lägg till byggsteg och väljer Docker.

    Azure DevOps Services – Lägg till byggsteg

  2. För varje avbildning konfigurerar du ett steg som använder docker build kommandot .

    Azure DevOps Services – Docker Build

    För byggåtgärden väljer du ditt Azure-containerregister, åtgärden Skapa en avbildning och Den Dockerfile som definierar varje avbildning. Ange Build-kontexten som Dockerfile-rotkatalogen och definiera avbildningsnamnet.

    Som du ser på föregående skärm startar du avbildningsnamnet med URI:n för ditt Azure-containerregister. (Du kan också använda en byggvariabel för att parameterisera taggen för avbildningen, till exempel byggidentifieraren i det här exemplet.)

  3. För varje avbildning konfigurerar du ett andra steg som använder docker push kommandot .

    Azure DevOps Services – Docker Push

    För push-åtgärden väljer du azure-containerregistret, åtgärden Pusha en avbildning och anger avbildningsnamnet som skapades i föregående steg.

  4. När du har konfigurerat bygg- och push-stegen för var och en av de fem avbildningarna lägger du till ytterligare två steg i byggarbetsflödet.

    a. En kommandoradsaktivitet som använder ett bash-skript för att ersätta BuildNumber-förekomsten i filen docker-compose.yml med det aktuella bygg-ID:t. Mer information finns på följande skärm.

    Azure DevOps Services – Uppdatera skrivfil

    b. En uppgift som tar bort den uppdaterade Compose-filen som en kompileringsartefakt så att den kan användas i versionen. Mer information finns på följande skärm.

    Azure DevOps Services – Publicera skrivfil

  5. Klicka på Spara och namnge bygg-pipelinen.

Steg 3: Skapa versionspipelinen

Med Azure DevOps Services kan du hantera versioner i olika miljöer. Du kan aktivera kontinuerlig distribution för att se till att programmet distribueras i olika miljöer (till exempel utveckling, testning, förproduktion och produktion) på ett smidigt sätt. Du kan skapa en ny miljö som representerar ditt Azure Container Service Docker Swarm-kluster.

Azure DevOps Services – Lansering till ACS

Inledande versionskonfiguration

  1. Om du vill skapa en versionspipeline klickar du på Versioner>+ Version

  2. Om du vill konfigurera artefaktkällan klickar du på Artefakter>Länka en artefaktkälla. Här länkar du den nya versionspipelinen till den version som du definierade i föregående steg. Genom att göra detta är docker-compose.yml-filen tillgänglig i versionsprocessen.

    Azure DevOps Services – Versionsartefakter

  3. Om du vill konfigurera versionsutlösaren klickar du på Utlösare och väljer Kontinuerlig distribution. Ange utlösaren på samma artefaktkälla. Den här inställningen säkerställer att en ny version startar så snart bygget har slutförts.

    Azure DevOps Services – versionsutlösare

Definiera versionsarbetsflödet

Versionsarbetsflödet består av två uppgifter som du lägger till.

  1. Konfigurera en uppgift för att på ett säkert sätt kopiera skrivfilen till en distributionsmapp på Docker Swarm-huvudnoden med hjälp av den SSH-anslutning som du konfigurerade tidigare. Mer information finns på följande skärm.

    Azure DevOps Services – Släpp SCP

  2. Konfigurera en andra uppgift för att köra ett bash-kommando för körning docker och docker-compose kommandon på huvudnoden. Mer information finns på följande skärm.

    Azure DevOps Services – Släpp Bash

    Kommandot som körs på huvudservern använder Docker CLI och Docker-Compose CLI för att utföra följande uppgifter:

    • Logga in på Azure-containerregistret (det använder tre byggvariabler som definieras på fliken Variabler )

    • Definiera variabeln DOCKER_HOST som ska fungera med Swarm-slutpunkten (:2375)

    • Navigera till den distributionsmapp som skapades av den föregående säkra kopieringsuppgiften och som innehåller filen docker-compose.yml

    • Kör docker-compose kommandon som hämtar de nya avbildningarna, stoppar tjänsterna, tar bort tjänsterna och skapar containrarna.

      Viktigt

      Som du ser på föregående skärm lämnar du kryssrutan Fail on STDERR (Misslyckas på STDERR ) avmarkerad. Det här är en viktig inställning eftersom docker-compose utskrifter av flera diagnostikmeddelanden, till exempel containrar stoppas eller tas bort, på standardfelutdata. Om du markerar kryssrutan rapporterar Azure DevOps Services att fel uppstod under lanseringen, även om allt går bra.

  3. Spara den här nya versionspipelinen.

Anteckning

Den här distributionen innehåller en del stilleståndstid eftersom vi stoppar de gamla tjänsterna och kör den nya. Du kan undvika detta genom att göra en blågrön distribution.

Steg 4. Testa CI/CD-pipelinen

Nu när du är klar med konfigurationen är det dags att testa den nya CI/CD-pipelinen. Det enklaste sättet att testa det är att uppdatera källkoden och checka in ändringarna i GitHub-lagringsplatsen. Några sekunder efter att du har push-överfört koden visas en ny version som körs i Azure DevOps Services. När det är klart utlöses en ny version och den nya versionen av programmet distribueras i Azure Container Service-klustret.

Nästa steg