Udostępnij za pośrednictwem


Kompilowanie i wdrażanie w usłudze Azure Kubernetes Service za pomocą usługi Azure Pipelines

Azure DevOps Services

Użyj usługi Azure Pipelines do automatycznego wdrażania w usłudze Azure Kubernetes Service (AKS). Usługa Azure Pipelines umożliwia tworzenie, testowanie i wdrażanie za pomocą ciągłej integracji i ciągłego dostarczania (CD) przy użyciu usługi Azure DevOps.

W tym artykule dowiesz się, jak utworzyć potok, który stale kompiluje i wdraża aplikację. Za każdym razem, gdy zmieniasz kod w repozytorium zawierającym plik Dockerfile, obrazy są wypychane do usługi Azure Container Registry, a manifesty są następnie wdrażane w klastrze usługi AKS.

Wymagania wstępne

  • Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
  • Połączenie usługi Azure Resource Manager. Utwórz połączenie usługi Azure Resource Manager.
  • Konto usługi GitHub. Utwórz bezpłatne konto usługi GitHub, jeśli jeszcze go nie masz.

Uzyskiwanie kodu

Utwórz rozwidlenie następującego repozytorium zawierającego przykładową aplikację i plik Dockerfile:

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

Tworzenie zasobów platformy Azure

Zaloguj się do witryny Azure Portal, a następnie wybierz przycisk Cloud Shell w prawym górnym rogu. Użyj interfejsu wiersza polecenia platformy Azure lub programu PowerShell, aby utworzyć klaster usługi AKS.

Tworzenie rejestru kontenerów

# 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

Logowanie się do usługi Azure Pipelines

Zaloguj się do usługi Azure Pipelines. Po zalogowaniu przeglądarka przejdzie do https://dev.azure.com/my-organization-name pulpitu nawigacyjnego usługi Azure DevOps i wyświetli go.

W wybranej organizacji utwórz projekt. Jeśli nie masz żadnych projektów w organizacji, zobaczysz ekran Tworzenie projektu, aby rozpocząć pracę . W przeciwnym razie wybierz przycisk Utwórz projekt w prawym górnym rogu pulpitu nawigacyjnego.

Tworzenie potoku

Łączenie i wybieranie repozytorium

  1. Zaloguj się do organizacji usługi Azure DevOps i przejdź do projektu.

  2. Przejdź do obszaru Potoki, a następnie wybierz pozycję Nowy potok.

  3. Wykonaj kroki kreatora, wybierając najpierw usługę GitHub jako lokalizację kodu źródłowego.

  4. Być może nastąpi przekierowanie do usługi GitHub w celu zalogowania się. Jeśli tak, wprowadź poświadczenia usługi GitHub.

  5. Po wyświetleniu listy repozytoriów wybierz repozytorium.

  6. Możesz zostać przekierowany do usługi GitHub, aby zainstalować aplikację Azure Pipelines. Jeśli tak, wybierz pozycję Zatwierdź i zainstaluj.

  7. Wybierz pozycję Wdróż w usłudze Azure Kubernetes Service.

  8. Jeśli zostanie wyświetlony monit, wybierz subskrypcję, w której utworzono rejestr i klaster.

  9. myapp Wybierz klaster.

  10. W polu Przestrzeń nazw wybierz pozycję Istniejąca, a następnie wybierz pozycję domyślną.

  11. Wybierz nazwę rejestru kontenerów.

  12. Możesz pozostawić nazwę obrazu ustawioną na wartość domyślną.

  13. Ustaw port usługi na 8080.

  14. Ustaw pole wyboru Włącz przeglądanie aplikacji dla żądań ściągnięcia, aby przejrzeć konfigurację powiązaną z aplikacją, która ma zostać uwzględniona w potoku automatycznie wygenerowanym w kolejnych krokach.

  15. Wybierz pozycję Zweryfikuj i skonfiguruj.

    Podczas tworzenia potoku przez usługę Azure Pipelines proces będzie następujący:

    • Utwórz połączenie usługi rejestru platformy Docker, aby umożliwić potokowi wypychanie obrazów do rejestru kontenerów.

    • Utwórz środowisko i zasób Kubernetes w środowisku. W przypadku klastra z obsługą kontroli dostępu opartej na rolach utworzony zasób Kubernetes niejawnie tworzy obiekty ServiceAccount i RoleBinding w klastrze, aby utworzone konto ServiceAccount nie może wykonywać operacji poza wybraną przestrzenią nazw.

    • Wygeneruj plik azure-pipelines.yml , który definiuje potok.

    • Generowanie plików manifestu platformy Kubernetes. Te pliki są generowane przez nawilżanie szablonów deployment.yml i service.yml na podstawie wybranych opcji. Gdy wszystko będzie gotowe, wybierz pozycję Zapisz i uruchom.

  16. Wybierz pozycję Zapisz i uruchom.

  17. Możesz zmienić komunikat Zatwierdź na coś takiego jak Dodawanie potoku do naszego repozytorium. Gdy wszystko będzie gotowe, wybierz pozycję Zapisz i uruchom , aby zatwierdzić nowy potok w repozytorium, a następnie rozpocznij pierwsze uruchomienie nowego potoku.

Wyświetlanie wdrożenia aplikacji

W miarę uruchamiania potoku obserwuj etap kompilacji, a następnie etap wdrażania przejdź od niebieskiego (uruchomionego) do zielonego (ukończonego). Możesz wybrać etapy i zadania, aby obserwować działanie potoku.

Uwaga

Jeśli używasz agenta hostowanego przez firmę Microsoft, to musisz dodać zakres adresów IP agenta hostowanego przez firmę Microsoft do zapory. Pobierz cotygodniową listę zakresów adresów IP z cotygodniowego pliku JSON, który jest publikowany w każdą środę. Nowe zakresy adresów IP zaczynają obowiązywać w najbliższy poniedziałek. Aby uzyskać więcej informacji, zobacz Agenci hostowani przez firmę Microsoft. Aby znaleźć zakresy adresów IP wymagane dla organizacji usługi Azure DevOps, dowiedz się, jak identyfikować możliwe zakresy adresów IP dla agentów hostowanych przez firmę Microsoft.

Po zakończeniu przebiegu potoku sprawdź, co się stało, a następnie przejdź do wdrożonej aplikacji. Z podsumowania potoku:

  1. Wybierz kartę Środowiska.

  2. Wybierz pozycję Wyświetl środowisko.

  3. Wybierz wystąpienie aplikacji dla wdrożonej przestrzeni nazw. Jeśli użyto wartości domyślnych, jest to aplikacja myapp w domyślnej przestrzeni nazw.

  4. Wybierz kartę Usługi .

  5. Wybierz i skopiuj zewnętrzny adres IP do schowka.

  6. Otwórz nową kartę lub okno przeglądarki i wprowadź <adres> IP:8080.

Jeśli tworzysz naszą przykładową aplikację, w przeglądarce pojawi się komunikat Hello world .

Jak kompiluje się potok

Po zakończeniu wybierania opcji, a następnie przejdź do weryfikowania i konfigurowania potoku usługi Azure Pipelines utworzonego potoku przy użyciu szablonu Deploy to Azure Kubernetes Service (Wdrażanie w usłudze Azure Kubernetes Service ).

Etap kompilacji używa zadania platformy Docker do kompilowania i wypychania obrazu do usługi 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'

Zadanie wdrożenia używa zadania manifestu kubernetes do utworzenia imagePullSecret węzłów klastra Kubernetes wymaganych do pobrania z zasobu usługi Azure Container Registry. Pliki manifestu są następnie używane przez zadanie manifestu Kubernetes do wdrożenia w klastrze Kubernetes. Pliki service.yml manifestu i deployment.yml, zostały wygenerowane podczas korzystania z szablonu Deploy to Azure Kubernetes Service (Wdrażanie w usłudze 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)'

Czyszczenie zasobów

Za każdym razem, gdy skończysz z utworzonymi zasobami, możesz użyć następującego polecenia, aby je usunąć:

az group delete --name myapp-rg

Wprowadź y po wyświetleniu monitu.