Ćwiczenie — tworzenie akcji usługi GitHub w celu wdrożenia w usłudze 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 plik code tab, a następnie wybierz product.yml plik.

  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 ciąg [replace with your ACR name] nazwą rekordu ACR, na przykład acseshop186748394.

  4. W prawym górnym rogu wybierz pozycję Zatwierdź zmiany... a następnie w oknie dialogowym wybierz pozycję Zatwierdź zmiany.

Tworzenie akcji wdrożenia

Kod YAML dodaje krok usługi GitHub, który:

Ma jeden krok, który wdraża nowe obrazy. Oto kroki modułu uruchamiającego ubuntu-latest :

  1. Wyewidencjonuj repozytorium, w których znajduje się ten plik.
  2. Logowanie do platformy Azure loguje się na platformie Azure przy użyciu poświadczeń jednostki usługi.
  3. Konfigurowanie narzędzia kubelogin na potrzeby logowania nieinterakcyjnego konfiguruje plik kubeconfig na potrzeby uwierzytelniania platformy Azure.
  4. Pobieranie kontekstu zestawu kontekstowego K8s ustawia poświadczenia usługi Azure Kubernetes Service (AKS) w pliku modułu .kube/config uruchamiającego.
  5. 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 tabkarcie wybierz kartę .github/workflows .

  2. Wybierz opcję 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.

Wyzwalanie wdrożenia

azure-kubernetes-service.yml Aktualizowanie pliku i zatwierdzanie zmian powoduje automatyczne wyzwolenie innego 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 wybierz folder w folderze code tabProducts .

  2. Wybierz folder Data.

  3. ProductDataContext.c Wybierz plik.

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

  5. W dolnej części pliku dodaj nowy produkt do tablicy products :

    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... a 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 przebiegu 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.

    Screenshot that shows the deploy job selected with a list of all the steps.

  4. W terminalu uruchom następujące polecenie, aby monitorować zasobniki usługi kuponowej w klastrze usługi AKS. Flaga --selector filtruje listę tylko do zasobników dla usługi kuponu, a flaga --watch nakazuje kubectl obserwowanie zmian.

    kubectl get pods --selector=app=productservice --watch
    

    Podczas wdrażania zostanie wyświetlona odmiana 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 poprzednich danych wyjściowych zwróć uwagę, że zostanie utworzony nowy zasobnik usługi productservice . Gdy nowy zasobnik będzie gotowy, stary zostanie zakończony. Ten proces sprawia, że przejście do nowej wersji jest jak najpłynniejsze.

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 klawisze CTRL i wybierz link, aby otworzyć aplikację na nowej karcie.

Przejdź do strony produktów, aby wyświetlić nowy namiot wymieniony w dolnej części strony.

Wycofywanie wdrożenia

Jednym z typowych problemów związanych z produkcją 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.

Uwaga

W rzeczywistym scenariuszu wdrażasz artefakty kompilacji w wielu środowiskach. Na przykład mogą istnieć środowiska deweloperskie, testowe i przejściowe. Przepływy pracy wdrażania można wyzwalać według zdarzeń, takich jak scalanie żądania ściągnięcia. Możesz dodać bramy dotyczące jakości lub zatwierdzenia, takie jak zatwierdzenie żądania ściągnięcia uczestnika projektu, aby zapobiec nieoczekiwanym wdrożeniom w środowisku produkcyjnym.

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 jednostki usługi Azure Active Directory dla funkcji GitHub Actions do użycia?

3.

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