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

Połączenie i wybierz 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, 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@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              namespace: $(k8sNamespace)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)

          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              namespace: $(k8sNamespace)
              manifests: |
                $(System.ArtifactsDirectory)/manifests/deployment.yml
                $(System.ArtifactsDirectory)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

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.

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

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 

Konfiguruj uwierzytelnianie

W przypadku korzystania z usługi Azure Container Registry (ACR) z usługą Azure Kubernetes Service (AKS) należy ustanowić mechanizm uwierzytelniania. Można to osiągnąć na dwa sposoby:

  1. Udzielanie usłudze AKS dostępu do usługi ACR. Zobacz Uwierzytelnianie za pomocą usługi Azure Container Registry z usługi Azure Kubernetes Service.

  2. Użyj wpisu tajnego ściągania obrazu Kubernetes. Klucz tajny ściągania obrazu można utworzyć przy użyciu zadania wdrażania platformy Kubernetes.

Tworzenie potoku wydania

Potok kompilacji używany do konfigurowania ciągłej integracji utworzył już obraz platformy Docker i wypchnął go do usługi Azure Container Registry. Został on również spakowany i opublikowany wykres helm jako artefakt. W potoku wydania wdrożymy obraz kontenera jako aplikację Helm w klastrze usługi AKS.

  1. W usłudze Azure Pipelines otwórz podsumowanie kompilacji.

  2. W podsumowaniu kompilacji wybierz ikonę Wydanie , aby uruchomić nowy potok wydania.

    Jeśli wcześniej utworzono potok wydania, który używa tych artefaktów kompilacji, zostanie wyświetlony monit o utworzenie nowej wersji. W takim przypadku przejdź do strony Wydania i uruchom tam nowy potok wydania, wybierając ikonę + .

  3. Wybierz szablon Puste zadanie.

  4. Otwórz stronę Zadania i wybierz pozycję Zadanie agenta.

  5. Wybierz + dodanie nowego zadania i dodanie zadania instalatora narzędzia Helm. Dzięki temu agent, który uruchamia kolejne zadania, ma zainstalowany program Helm i narzędzie Kubectl.

  6. Wybierz + ponownie i dodaj zadanie Pakiet i wdróż wykresy helm. Skonfiguruj ustawienia dla tego zadania w następujący sposób:

    • typ Połączenie ion: wybierz pozycję Azure Resource Manager, aby nawiązać połączenie z klastrem usługi AKS przy użyciu połączenia z usługą platformy Azure. Alternatywnie, jeśli chcesz nawiązać połączenie z dowolnym klastrem Kubernetes przy użyciu narzędzia kubeconfig lub konta usługi, możesz wybrać pozycję Kubernetes Service Połączenie ion. W takim przypadku musisz utworzyć i wybrać połączenie usługi Kubernetes zamiast subskrypcji platformy Azure dla następującego ustawienia.

    • Subskrypcja platformy Azure: wybierz połączenie z listy w obszarze Dostępna usługa platformy Azure Połączenie ions lub utwórz bardziej ograniczone połączenie uprawnień z subskrypcją platformy Azure. Jeśli obok danych wejściowych zostanie wyświetlony przycisk Autoryzuj , użyj go, aby autoryzować połączenie z subskrypcją platformy Azure. Jeśli nie widzisz wymaganej subskrypcji platformy Azure na liście subskrypcji, zobacz Tworzenie połączenia usługi platformy Azure w celu ręcznego skonfigurowania połączenia.

    • Grupa zasobów: wprowadź lub wybierz grupę zasobów zawierającą klaster usługi AKS.

    • Klaster Kubernetes: wprowadź lub wybierz utworzony klaster usługi AKS.

    • Polecenie: wybierz init jako polecenie Helm. Spowoduje to zainstalowanie narzędzia Tiller w uruchomionym klastrze Kubernetes. Skonfiguruje również dowolną wymaganą konfigurację lokalną. Tick Użyj wersji obrazu kanarowego, aby zainstalować najnowszą wersję wstępną tillera. Możesz również uaktualnić Tiller, jeśli jest on wstępnie zainstalowany, zaznaczając opcję Uaktualnij Tiller. Jeśli te opcje są włączone, zadanie zostanie uruchomione helm init --canary-image --upgrade

  7. Wybierz + w zadaniu agenta i dodaj kolejny pakiet i wdróż zadanie charts programu Helm. Skonfiguruj ustawienia dla tego zadania w następujący sposób:

    • Klaster Kubernetes: wprowadź lub wybierz utworzony klaster usługi AKS.

    • Przestrzeń nazw: wprowadź przestrzeń nazw klastra Kubernetes, w której chcesz wdrożyć aplikację. Platforma Kubernetes obsługuje wiele klastrów wirtualnych wspieranych przez ten sam klaster fizyczny. Te klastry wirtualne są nazywane przestrzeniami nazw. Przestrzenie nazw umożliwiają tworzenie różnych środowisk, takich jak tworzenie, testowanie i przemieszczanie w tym samym klastrze.

    • Polecenie: wybierz pozycję uaktualnij jako polecenie helm. Możesz uruchomić dowolne polecenie helm przy użyciu tego zadania i przekazać opcje poleceń jako argumenty. Po wybraniu uaktualnienia zadanie wyświetla więcej pól:

      • Typ wykresu: wybierz pozycję Ścieżka pliku. Alternatywnie możesz określić nazwę wykresu, jeśli chcesz określić adres URL lub nazwę wykresu. Jeśli na przykład nazwa wykresu to stable/mysql, zadanie jest wykonywane helm upgrade stable/mysql

      • Ścieżka wykresu: może to być ścieżka do spakowanego wykresu lub ścieżki do rozpakowanego katalogu wykresu. W tym przykładzie publikujesz wykres przy użyciu kompilacji ciągłej integracji, więc wybierz pakiet plików przy użyciu selektora plików lub wprowadź $(System.DefaultWorkingDirectory)/**/*.tgz

      • Nazwa wydania: wprowadź nazwę wydania, na przykład azuredevops

      • Utwórz ponownie zasobniki: zaznacz to pole wyboru, jeśli podczas wydania nastąpiła zmiana konfiguracji i chcesz zastąpić uruchomiony zasobnik nową konfiguracją.

      • Resetuj wartości: zaznacz to pole wyboru, jeśli chcesz, aby wartości wbudowane na wykresie przesłoniły wszystkie wartości dostarczone przez zadanie.

      • Wymuś: zaznacz to pole wyboru, jeśli wystąpią konflikty, chcesz uaktualnić i wycofać, aby usunąć, utworzyć ponownie zasób i ponownie zainstalować pełną wersję. Jest to przydatne w scenariuszach, w których stosowanie poprawek może zakończyć się niepowodzeniem (na przykład w przypadku usług, ponieważ adres IP klastra jest niezmienny).

      • Argumenty: wprowadź argumenty poleceń programu Helm i ich wartości; na potrzeby tego przykładu --set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId) Zobacz tę sekcję , aby zapoznać się z opisem, dlaczego używamy tych argumentów.

      • Włącz protokół TLS: zaznacz to pole wyboru, aby włączyć silne połączenia oparte na protokole TLS między programem Helm i Tiller.

      • Certyfikat urzędu certyfikacji: określ certyfikat urzędu certyfikacji, który ma zostać przekazany i używany do wystawiania certyfikatów dla klienta Tiller i Helm.

      • Certyfikat: określ certyfikat Tiller lub certyfikat klienta programu Helm

      • Klucz: określ klucz tillera lub klucz klienta programu Helm

  8. Na stronie Zmienne potoku dodaj zmienną o nazwie imageRepoName i ustaw wartość na nazwę repozytorium obrazów programu Helm. Zazwyczaj jest to format example.azurecr.io/coderepository

  9. Zapisz potok wydania.

Argumenty używane w zadaniu uaktualniania programu Helm

W potoku kompilacji obraz kontenera jest oznaczony tagiem $(Build.BuildId) i jest on wypychany do usługi Azure Container Registry. Na wykresie programu Helm można sparametryzować szczegóły obrazu kontenera, takie jak nazwa i tag, ponieważ ten sam wykres może służyć do wdrażania w różnych środowiskach. Te wartości można również określić w pliku values.yaml lub przesłonić przez plik wartości dostarczonych przez użytkownika, który może zostać zastąpiony przez --set parametry podczas instalacji lub uaktualniania programu Helm.

W tym przykładzie przekazujemy następujące argumenty:

--set image.repository=$(imageRepoName) --set image.tag=$(Build.BuildId)

Wartość $(imageRepoName) elementu została ustawiona na stronie Zmienne (lub sekcji zmiennych pliku YAML). Alternatywnie możesz bezpośrednio zastąpić ją nazwą repozytorium obrazów w --set pliku argumentów lub values.yaml . Na przykład:

  image:
    repository: VALUE_TO_BE_OVERRIDDEN
    tag: latest

Inną alternatywą jest ustawienie opcji Ustaw wartości zadania w celu określenia wartości argumentu jako par klucz-wartość rozdzielona przecinkami.

Tworzenie wydania w celu wdrożenia aplikacji

Teraz możesz utworzyć wydanie, co oznacza rozpoczęcie procesu uruchamiania potoku wydania z artefaktami utworzonymi przez określoną kompilację. Spowoduje to wdrożenie kompilacji:

  1. Wybierz pozycję + Wydanie i wybierz pozycję Utwórz wydanie.

  2. W panelu Tworzenie nowej wersji sprawdź, czy wybrano wersję artefaktu, której chcesz użyć, i wybierz pozycję Utwórz.

  3. Wybierz link wydania w komunikacie paska informacji. Na przykład: "Release-1 has been created".

  4. W widoku potoku wybierz link stan na etapach potoku, aby wyświetlić dzienniki i dane wyjściowe agenta.