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
Zaloguj się do organizacji usługi Azure DevOps i przejdź do projektu.
Przejdź do obszaru Potoki, a następnie wybierz pozycję Nowy potok.
Wykonaj kroki kreatora, wybierając najpierw usługę GitHub jako lokalizację kodu źródłowego.
Być może nastąpi przekierowanie do usługi GitHub w celu zalogowania się. Jeśli tak, wprowadź poświadczenia usługi GitHub.
Po wyświetleniu listy repozytoriów wybierz repozytorium.
Możesz zostać przekierowany do usługi GitHub, aby zainstalować aplikację Azure Pipelines. Jeśli tak, wybierz pozycję Zatwierdź i zainstaluj.
Wybierz pozycję Wdróż w usłudze Azure Kubernetes Service.
Jeśli zostanie wyświetlony monit, wybierz subskrypcję, w której utworzono rejestr i klaster.
myapp
Wybierz klaster.W polu Przestrzeń nazw wybierz pozycję Istniejąca, a następnie wybierz pozycję domyślną.
Wybierz nazwę rejestru kontenerów.
Możesz pozostawić nazwę obrazu ustawioną na wartość domyślną.
Ustaw port usługi na 8080.
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.
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.
Wybierz pozycję Zapisz i uruchom.
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:
Wybierz kartę Środowiska.
Wybierz pozycję Wyświetl środowisko.
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.
Wybierz kartę Usługi .
Wybierz i skopiuj zewnętrzny adres IP do schowka.
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.
Azure Kubernetes Service