Dela via


Skapa och distribuera till Azure Kubernetes Service med Azure Pipelines

Azure DevOps Services

Använd Azure Pipelines för att automatiskt distribuera till Azure Kubernetes Service (AKS). Med Azure Pipelines kan du skapa, testa och distribuera med kontinuerlig integrering (CI) och kontinuerlig leverans (CD) med Hjälp av Azure DevOps.

I den här artikeln får du lära dig hur du skapar en pipeline som kontinuerligt skapar och distribuerar din app. Varje gång du ändrar koden på en lagringsplats som innehåller en Dockerfile skickas avbildningarna till Azure Container Registry och manifesten distribueras sedan till aks-klustret.

Förutsättningar

Hämta koden

Förgrena följande lagringsplats som innehåller ett exempelprogram och en Dockerfile:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Skapa Azure-resurserna

Logga in på Azure Portal och välj sedan knappen Cloud Shell i det övre högra hörnet. Använd Azure CLI eller PowerShell för att skapa ett AKS-kluster.

Skapa ett containerregister

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys

Logga in på Azure Pipelines

Logga in på Azure Pipelines. När du har loggat in går webbläsaren till https://dev.azure.com/my-organization-name och visar din Azure DevOps-instrumentpanel.

Skapa ett projekt i den valda organisationen. Om du inte har några projekt i din organisation visas skärmen Skapa ett projekt för att komma igång . Annars väljer du knappen Skapa projekt i det övre högra hörnet på instrumentpanelen.

Skapa pipelinen

Anslut och välj din lagringsplats

  1. Logga in på din Azure DevOps-organisation och gå till projektet.

  2. Gå till Pipelines och välj sedan Ny pipeline.

  3. Utför stegen i guiden genom att först välja GitHub som plats för källkoden.

  4. Du kan omdirigeras till GitHub för att logga in. I så fall anger du dina GitHub-autentiseringsuppgifter.

  5. När du ser listan över lagringsplatser väljer du din lagringsplats.

  6. Du kan omdirigeras till GitHub för att installera Azure Pipelines-appen. I så fall väljer du Godkänn och installera.

  7. Välj Distribuera till Azure Kubernetes Service.

  8. Om du uppmanas att göra det väljer du den prenumeration där du skapade registret och klustret.

  9. Välj klustret myapp .

  10. För Namnområde väljer du Befintlig och sedan standard.

  11. Välj namnet på containerregistret.

  12. Du kan lämna avbildningsnamnet inställt på standardvärdet.

  13. Ange tjänstporten till 8080.

  14. Ange kryssrutan Aktivera granskningsapp för pull-begäranden för granskning av apprelaterad konfiguration som ska ingå i yaml-pipelinen som genereras automatiskt i efterföljande steg.

  15. Välj Verifiera och konfigurera.

    När Azure Pipelines skapar din pipeline kommer processen att:

    • Skapa en Docker-registertjänstanslutning för att aktivera pipelinen för att skicka avbildningar till containerregistret.

    • Skapa en miljö och en Kubernetes-resurs i miljön. För ett RBAC-aktiverat kluster skapar den skapade Kubernetes-resursen implicit ServiceAccount- och RoleBinding-objekt i klustret så att det skapade ServiceAccount inte kan utföra åtgärder utanför det valda namnområdet.

    • Generera en azure-pipelines.yml fil som definierar din pipeline.

    • Generera Kubernetes-manifestfiler. Dessa filer genereras genom att de deployment.yml och service.yml mallar som baseras på de val du har gjort. När du är klar väljer du Spara och kör.

  16. Välj Spara och kör.

  17. Du kan ändra incheckningsmeddelandet till något som liknar Lägg till pipeline till vår lagringsplats. När du är klar väljer du Spara och kör för att checka in den nya pipelinen på lagringsplatsen och påbörjar sedan den första körningen av den nya pipelinen!

Se din appdistribution

När pipelinen körs kan du titta som byggfas och sedan gå från blått (körs) till grönt (slutfört). Du kan välja faser och jobb för att se hur din pipeline fungerar.

Kommentar

Om du använder en Microsoft-värdbaserad agent måste du lägga till IP-intervallet för Microsoft-agenten i brandväggen. Hämta veckolistan med IP-intervall från den veckovisa JSON-filen som publiceras varje onsdag. De nya IP-intervallen börjar gälla följande måndag. Mer information finns i Agenter med Microsoft som värd. Om du vill hitta de IP-intervall som behövs för din Azure DevOps-organisation kan du lära dig hur du identifierar möjliga IP-intervall för agenter med Microsoft som värd.

När pipelinekörningen är klar kan du utforska vad som hände och sedan gå och se din app distribuerad. Från pipelinesammanfattningen:

  1. Välj fliken miljöer.

  2. Välj Visa miljö.

  3. Välj instansen av din app för det namnområde som du distribuerade till. Om du använde standardvärdena är det myapp-appen i standardnamnområdet .

  4. Välj fliken Tjänster .

  5. Välj och kopiera den externa IP-adressen till Urklipp.

  6. Öppna en ny webbläsarflik eller ett nytt fönster och ange <IP-adress>:8080.

Om du skapar vår exempelapp visas Hello World i webbläsaren.

Så här bygger pipelinen

När du var klar med att välja alternativ och sedan fortsatte med att verifiera och konfigurera pipelinen skapade Azure Pipelines en pipeline åt dig med hjälp av mallen Distribuera till Azure Kubernetes Service .

Byggfasen använder Docker-uppgiften för att skapa och skicka avbildningen till Azure Container Registry.

- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)
          
    - task: PublishPipelineArtifact@1
      inputs:
        artifactName: 'manifests'
        path: 'manifests'

Distributionsjobbet använder Kubernetes-manifestaktiviteten för att skapa de imagePullSecret kubernetes-klusternoder som krävs för att hämta från Azure Container Registry-resursen. Manifestfiler används sedan av Kubernetes-manifestuppgiften för att distribuera till Kubernetes-klustret. Manifestfilerna service.yml och deployment.yml, genererades när du använde mallen Distribuera till Azure Kubernetes Service .

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  jobs:
  - deployment: Deploy
    displayName: Deploy job
    pool:
      vmImage: $(vmImageName)
    environment: 'myenv.aksnamespace' #customize with your environment
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: 'manifests'
              downloadPath: '$(System.ArtifactsDirectory)/manifests'

          - task: KubernetesManifest@1
            displayName: Create imagePullSecret
            inputs:
              action: 'createSecret'
              connectionType: 'kubernetesServiceConnection'
              kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
              secretType: 'dockerRegistry'
              secretName: '$(imagePullSecret)'
              dockerRegistryEndpoint: '$(dockerRegistryServiceConnection)'

          - task: KubernetesManifest@1
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: 'deploy'
              connectionType: 'kubernetesServiceConnection'
              kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
              manifests: |
                $(Pipeline.Workspace)/manifests/deployment.yml
                $(Pipeline.Workspace)/manifests/service.yml
              containers: '$(containerRegistry)/$(imageRepository):$(tag)'
              imagePullSecrets: '$(imagePullSecret)'

Rensa resurser

När du är klar med de resurser du skapade kan du använda följande kommando för att ta bort dem:

az group delete --name myapp-rg

Ange y när du uppmanas att göra det.