Delen via


Bouwen en implementeren naar Azure Kubernetes Service met Azure Pipelines

Azure DevOps Services

Azure Pipelines gebruiken om automatisch te implementeren in Azure Kubernetes Service (AKS). Met Azure Pipelines kunt u met behulp van Azure DevOps bouwen, testen en implementeren met continue integratie (CI) en continue levering (CD).

In dit artikel leert u hoe u een pijplijn maakt die uw app continu bouwt en implementeert. Telkens wanneer u de code wijzigt in een opslagplaats die een Dockerfile bevat, worden de installatiekopieën naar uw Azure Container Registry gepusht en worden de manifesten vervolgens geïmplementeerd in uw AKS-cluster.

Vereisten

Code ophalen

Fork de volgende opslagplaats met een voorbeeldtoepassing en een Dockerfile:

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

De Azure-resources maken

Meld u aan bij Azure Portal en selecteer vervolgens de knop Cloud Shell in de rechterbovenhoek. Gebruik Azure CLI of PowerShell om een AKS-cluster te maken.

Een containerregister maken

# 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

Aanmelden bij Azure Pipelines

Meld u aan bij Azure Pipelines. Nadat u zich hebt aangemeld, gaat uw browser naar https://dev.azure.com/my-organization-name en geeft u uw Azure DevOps-dashboard weer.

Maak binnen uw geselecteerde organisatie een project. Als u geen projecten in uw organisatie hebt, ziet u het scherm Een project maken om aan de slag te gaan . Selecteer anders de knop Project maken in de rechterbovenhoek van het dashboard.

Maak de pijplijn

Verbinding maken en uw opslagplaats selecteren

  1. Meld u aan bij uw Azure DevOps-organisatie en ga naar uw project.

  2. Ga naar Pijplijnen en selecteer vervolgens Nieuwe pijplijn.

  3. Voer de stappen van de wizard uit door eerst GitHub te selecteren als de locatie van uw broncode.

  4. U wordt mogelijk omgeleid naar GitHub om u aan te melden. Voer in dat geval uw GitHub-referenties in.

  5. Wanneer u de lijst met opslagplaatsen ziet, selecteert u de opslagplaats.

  6. U wordt mogelijk omgeleid naar GitHub om de Azure Pipelines-app te installeren. Als dat het zo is, selecteert u Goedkeuren en installeren.

  7. Selecteer Implementeren in Azure Kubernetes Service.

  8. Als u hierom wordt gevraagd, selecteert u het abonnement waarin u het register en cluster hebt gemaakt.

  9. Selecteer het myapp cluster.

  10. Voor naamruimte selecteert u Bestaand en selecteert u vervolgens de standaardwaarde.

  11. Selecteer de naam van het containerregister.

  12. U kunt de naam van de installatiekopieën op de standaardwaarde laten staan.

  13. Stel de servicepoort in op 8080.

  14. Stel het selectievakje Controle-app inschakelen voor pull-aanvragen in om de configuratie van de app te controleren die is gekoppeld aan de pijplijn-YAML automatisch gegenereerd in de volgende stappen.

  15. Selecteer Valideren en configureren.

    Terwijl Azure Pipelines uw pijplijn maakt, gebeurt het volgende:

    • Maak een Docker-registerserviceverbinding om uw pijplijn in staat te stellen installatiekopieën naar uw containerregister te pushen.

    • Maak een omgeving en een Kubernetes-resource in de omgeving. Voor een cluster met RBAC-functionaliteit maakt de gemaakte Kubernetes-resource impliciet ServiceAccount- en RoleBinding-objecten in het cluster, zodat het gemaakte ServiceAccount geen bewerkingen kan uitvoeren buiten de gekozen naamruimte.

    • Genereer een azure-pipelines.yml-bestand , waarmee uw pijplijn wordt gedefinieerd.

    • Kubernetes-manifestbestanden genereren. Deze bestanden worden gegenereerd door de deployment.yml en service.yml sjablonen te hydrateren op basis van selecties die u hebt gemaakt. Wanneer u klaar bent, selecteert u Opslaan en uitvoeren.

  16. Selecteer Opslaan en uitvoeren.

  17. U kunt het doorvoerbericht wijzigen in bijvoorbeeld Pijplijn toevoegen aan onze opslagplaats. Wanneer u klaar bent, selecteert u Opslaan en uitvoeren om de nieuwe pijplijn door te voeren in uw opslagplaats en begint u vervolgens met de eerste uitvoering van de nieuwe pijplijn.

Uw app implementeren bekijken

Terwijl uw pijplijn wordt uitgevoerd, bekijkt u als de buildfase en vervolgens uw implementatiefase, van blauw (actief) naar groen (voltooid). U kunt de fasen en taken selecteren om uw pijplijn in actie te bekijken.

Notitie

Als u een door Microsoft gehoste agent gebruikt, dan moet u het IP-bereik van de door Microsoft gehoste agent toevoegen aan uw firewall. Haal de wekelijkse lijst met IP-bereiken op uit het wekelijkse JSON-bestand, dat elke woensdag wordt gepubliceerd. De nieuwe IP-bereiken worden de volgende maandag van kracht. Raadpleeg door Microsoft gehoste agents voor meer informatie. Als u de IP-bereiken wilt vinden die vereist zijn voor uw Azure DevOps-organisatie, dan leert u hoe u de mogelijke IP-bereiken voor door Microsoft gehoste agents kunt identificeren.

Nadat de pijplijnuitvoering is voltooid, verkent u wat er is gebeurd en gaat u vervolgens naar de geïmplementeerde app. Vanuit de pijplijnsamenvatting:

  1. Selecteer het tabblad Omgevingen.

  2. Selecteer Omgeving weergeven.

  3. Selecteer het exemplaar van uw app voor de naamruimte waarnaar u hebt geïmplementeerd. Als u de standaardinstellingen hebt gebruikt, is dit de myapp-app in de standaardnaamruimte .

  4. Selecteer het tabblad Services .

  5. Selecteer en kopieer het externe IP-adres naar het klembord.

  6. Open een nieuw browsertabblad of -venster en voer <IP-adres> in:8080.

Als u onze voorbeeld-app bouwt, wordt Hallo wereld weergegeven in uw browser.

Hoe de pijplijn wordt gebouwd

Wanneer u klaar bent met het selecteren van opties en vervolgens verder bent gegaan met het valideren en configureren van de pijplijn die Azure Pipelines voor u heeft gemaakt, gebruikt u de sjabloon Implementeren in Azure Kubernetes Service .

In de buildfase wordt de Docker-taak gebruikt om de installatiekopieën te bouwen en naar Azure Container Registry te pushen.

- 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'

De implementatietaak maakt gebruik van de Kubernetes-manifesttaak om de imagePullSecret vereiste kubernetes-clusterknooppunten te maken om de Azure Container Registry-resource op te halen. Manifestbestanden worden vervolgens gebruikt door de Kubernetes-manifesttaak om te implementeren in het Kubernetes-cluster. De manifestbestanden service.yml en deployment.yml, zijn gegenereerd toen u de sjabloon Implementeren in Azure Kubernetes Service gebruikte.

- 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)'

Resources opschonen

Wanneer u klaar bent met de resources die u hebt gemaakt, kunt u de volgende opdracht gebruiken om ze te verwijderen:

az group delete --name myapp-rg

Voer in y wanneer u hierom wordt gevraagd.