Ćwiczenie — tworzenie akcji GitHub do wdrożenia w AKS
W tym ćwiczeniu wykonasz następujące zadania:
- Rozszerz istniejącą akcję usługi GitHub, aby uwzględnić zadanie wdrożenia.
- Sprawdź, czy zmiany są wdrażane w klastrze usługi Azure Kubernetes Service (AKS).
- Wycofaj wdrożenie.
Aktualizowanie manifestu platformy Kubernetes dla usługi produktu
Aby wdrożyć nowe wersje usługi produktu eShop, zmodyfikuj plik product.yml, aby wskazać usługę Azure Container Registry (ACR) użytą w poprzedniej lekcji.
W rozwidlonym repozytorium wybierz code tab, a następnie wybierz plik product.yml.
Aby edytować plik, wybierz ikonę edycji (ołówek).
Edytuj wiersz:
containers: - image: [replace with your ACR name].azurecr.io/productservice:latest
Zastąp
[replace with your ACR name]
nazwą swojego ACR; na przykład acseshop186748394.W prawym górnym rogu wybierz pozycję Zatwierdź zmiany... następnie w oknie dialogowym wybierz pozycję Zatwierdź zmiany.
Utwórz akcję wdrożenia
Kod YAML dodaje krok usługi GitHub, który:
Ma jeden krok, który wdraża nowe obrazy. Oto kroki w module ubuntu-latest
runner:
- Wyewidencjonuj repozytorium, w których znajduje się ten plik.
- Logowanie do Azure loguje się do platformy Azure przy użyciu poświadczeń jednostki usługi.
- Skonfiguruj narzędzie kubelogin na potrzeby logowania nieinterakcyjnego konfiguruje plik kubeconfig na potrzeby uwierzytelniania platformy Azure.
- Pobierz kontekst K8s Ustaw kontekst, aby ustawić poświadczenia usługi Azure Kubernetes Service (AKS) w pliku modułu uruchamiającego .kube/config.
- Wdraża aplikację wdraża aplikację w usłudze AKS przy użyciu obrazu wbudowanego w poprzednim kroku i edytowanego wcześniej pliku manifestu Kubernetes.
Wykonaj następujące kroki, aby utworzyć akcję usługi GitHub, która wdraża usługę kuponową:
W rozwidlonym repozytorium na code tabwybierz kartę .github/workflows.
Wybierz azure-kubernetes-service.yml.
Aby edytować plik, wybierz ikonę edycji (ołówek).
W dolnej części pliku wklej następujący kod YAML do edytora:
deploy: permissions: actions: read contents: read id-token: write runs-on: ubuntu-latest needs: [buildImage] steps: # Checks out the repository this file is in - uses: actions/checkout@v3 # Logs in with your Azure credentials - name: Azure login uses: azure/login@v1.4.6 with: creds: '${{ secrets.AZURE_CREDENTIALS }}' # Use kubelogin to configure your kubeconfig for Azure auth - name: Set up kubelogin for non-interactive login uses: azure/use-kubelogin@v1 with: kubelogin-version: 'v0.0.25' # Retrieves your Azure Kubernetes Service cluster's kubeconfig file - name: Get K8s context uses: azure/aks-set-context@v3 with: resource-group: ${{ env.RESOURCE_GROUP }} cluster-name: ${{ env.CLUSTER_NAME }} admin: 'false' use-kubelogin: 'true' # Deploys application based on given manifest file - name: Deploys application uses: Azure/k8s-deploy@v4 with: action: deploy manifests: ${{ env.DEPLOYMENT_MANIFEST_PATH }} images: | ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_NAME }}:${{ github.sha }} pull-images: false
W prawym górnym rogu wybierz pozycję Zatwierdź zmiany..., a następnie w oknie dialogowym wybierz pozycję Zatwierdź zmiany.
Uruchom wdrożenie
Aktualizowanie pliku azure-kubernetes-service.yml i zatwierdzanie zmian powoduje automatyczne wyzwolenie kolejnego wdrożenia. Teraz zobacz, jak wprowadzenie zmiany kodu wyzwala kolejne wdrożenie.
Masz nowy produkt, który twój zespół marketingowy chce dodać do katalogu.
W rozwidlonym repozytorium na code tabwybierz folder Products.
Wybierz folder Data.
Wybierz plik ProductDataContext.c.
Aby edytować plik, wybierz ikonę edycji (ołówek).
Na dole pliku dodaj nowy produkt do tablicy produktów .
new Product { Name = "Camping Tent 2", Description = "This updated tent is improved and cheaper, perfect for your next trip.", Price = 79.99m, ImageUrl = "product9.png" },
W prawym górnym rogu wybierz pozycję Zatwierdź zmiany... następnie w oknie dialogowym wybierz pozycję Zatwierdź zmiany.
Monitorowanie wdrożenia
Aby monitorować postęp wdrożenia, wybierz kartę Actions.
Wybierz najnowszy przebieg przepływu pracy wymieniony dla przepływu pracy Build and deploy an app to AKS. Nazwa uruchomienia to komunikat zatwierdzenia użyty w poprzednim kroku.
Wybierz zadanie deploy, aby wyświetlić szczegółowe informacje dotyczące tego przebiegu przepływu pracy.
W terminalu uruchom następujące polecenie, aby monitorować pody usługi kuponów w klastrze AKS. Flaga
--selector
filtruje listę tylko do podów dla usługi kuponów, a flaga--watch
instruujekubectl
, aby monitorować zmiany.kubectl get pods --selector=app=productservice --watch
Podczas wdrażania wyświetli się wariant następujących danych wyjściowych.
NAME READY STATUS RESTARTS AGE productservice-7979d4c47-xlcrr 1/1 Running 0 17m productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 ContainerCreating 0 0s productservice-ff98b6d8d-7wmsh 1/1 Running 0 4s productservice-7979d4c47-xlcrr 1/1 Terminating 0 19m
W poprzednim wyniku zwróć uwagę, że nowy pod productservice zostanie utworzony. Gdy nowy moduł będzie gotowy, stary zostanie usunięty. Ten proces sprawia, że przejście do nowej wersji jest tak płynne, jak to możliwe.
Weryfikowanie aplikacji
Wykonaj następujące kroki, aby sprawdzić, czy aplikacja nadal działa:
Wyświetl wdrożony sklep eShop, uruchamiając to polecenie w terminalu:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"
Powyższe polecenie zwraca zewnętrzny adres IP aplikacji internetowej. Przytrzymaj ctrl i wybierz link, aby otworzyć aplikację na nowej karcie.
Przejdź do strony produktów, aby wyświetlić nowy namiot wymieniony na dole strony.
Wycofywanie wdrożenia
Jednym z powszechnych sposobów na rozwiązanie problemów produkcyjnych jest przywrócenie znanego dobrego wdrożenia. Platforma Kubernetes utrzymuje historię wdrażania, której można użyć do wycofania poprzedniej wersji aplikacji.
W terminalu uruchom to polecenie, aby usunąć nowy namiot, który właśnie został dodany do witryny internetowej:
kubectl rollout undo deployment/productservice
Powinien zostać wyświetlony następujący komunikat konsoli:
deployment.apps/productservice rolled back
Odśwież stronę produktów w przeglądarce, a nowy namiot nie powinien już być wyświetlany.
Notatka
W rzeczywistym scenariuszu wdrażasz artefakty kompilacji w wielu środowiskach. Na przykład mogą istnieć środowiska programistyczne, testowe i przejściowe. Przepływy pracy wdrażania można wyzwalać podczas zdarzeń, takich jak scalanie pull requestów. Możesz dodać bramy dotyczące jakości lub zatwierdzenia, takie jak zatwierdzenie PR interesariusza, aby zapobiec nieoczekiwanym wdrożeniom na produkcję.