Ćwiczenie — tworzenie akcji GitHub do wdrożenia w AKS

Ukończone

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.

  1. W rozwidlonym repozytorium wybierz code tab, a następnie wybierz plik product.yml.

  2. Aby edytować plik, wybierz ikonę edycji (ołówek).

  3. 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.

  4. 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:

  1. Wyewidencjonuj repozytorium, w których znajduje się ten plik.
  2. Logowanie do Azure loguje się do platformy Azure przy użyciu poświadczeń jednostki usługi.
  3. Skonfiguruj narzędzie kubelogin na potrzeby logowania nieinterakcyjnego konfiguruje plik kubeconfig na potrzeby uwierzytelniania platformy Azure.
  4. Pobierz kontekst K8s Ustaw kontekst, aby ustawić poświadczenia usługi Azure Kubernetes Service (AKS) w pliku modułu uruchamiającego .kube/config.
  5. 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ą:

  1. W rozwidlonym repozytorium na code tabwybierz kartę .github/workflows.

  2. Wybierz azure-kubernetes-service.yml.

  3. Aby edytować plik, wybierz ikonę edycji (ołówek).

  4. 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
    
    
  5. 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.

  1. W rozwidlonym repozytorium na code tabwybierz folder Products.

  2. Wybierz folder Data.

  3. Wybierz plik ProductDataContext.c.

  4. Aby edytować plik, wybierz ikonę edycji (ołówek).

  5. 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" },
    
  6. W prawym górnym rogu wybierz pozycję Zatwierdź zmiany... następnie w oknie dialogowym wybierz pozycję Zatwierdź zmiany.

Monitorowanie wdrożenia

  1. Aby monitorować postęp wdrożenia, wybierz kartę Actions.

  2. 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.

  3. Wybierz zadanie deploy, aby wyświetlić szczegółowe informacje dotyczące tego przebiegu przepływu pracy.

    Zrzut ekranu przedstawiający wybrane zadanie wdrażania z listą wszystkich kroków.

  4. 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 instruuje kubectl, 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ę.

Sprawdź swoją wiedzę

1.

Jakie jest najlepsze miejsce do przechowywania poufnych informacji, takich jak poświadczenia, dla funkcji GitHub Actions?

2.

Jaki jest cel tworzenia obiektu usługi Azure Active Directory do wykorzystania przez GitHub Actions?

3.

Dlaczego podczas wdrażania uaktualnienia usługa AKS tworzy nowy kontener, gdy stary jest nadal uruchomiony?