Ćwiczenie — tworzenie środowisk efemerycznych dla żądań ściągnięcia

Ukończone

Niektórzy członkowie zespołu powiedzieli, że doceniają uzyskanie zautomatyzowanej opinii linter Bicep na temat zmian kodu przed wysłaniem ich do innych członków zespołu w celu przejrzenia. Teraz zdecydowano się na nadanie współautorom i recenzentom możliwości wdrażania i przeglądania kodu w środowisku efemerycznym.

W tym ćwiczeniu zaktualizujesz przepływ pracy żądania ściągnięcia, aby wdrożyć środowisko efemeryczne przy każdym otwarciu żądania ściągnięcia i ponownie wdrożyć go, gdy kod zostanie wypchnięty do gałęzi żądania ściągnięcia. Utworzysz również kolejny przepływ pracy, aby automatycznie usunąć środowisko po zamknięciu żądania ściągnięcia. Przetestujesz zmiany, tworząc żądanie ściągnięcia dla witryny internetowej w celu użycia obrazu kontenera platformy Docker.

Podczas tego procesu wykonasz następujące czynności:

  • Zaktualizuj przepływ pracy żądania ściągnięcia, aby wdrożyć środowisko efemeryczne.
  • Utwórz przepływ pracy usuwania żądania ściągnięcia, aby usunąć środowisko efemeryczne.
  • Utwórz żądanie ściągnięcia i obejrzyj utworzone środowisko efemeryczne.
  • Zatwierdź żądanie ściągnięcia i obserwuj usunięcie środowiska efemerycznego.

Aktualizowanie przepływu pracy żądania ściągnięcia w celu wdrożenia efemerycznego środowiska

Aby rozpocząć, należy zaktualizować przepływ pracy weryfikacji żądania ściągnięcia , aby utworzyć środowisko efemeryczne.

  1. W terminalu programu Visual Studio Code zapoznaj się z gałęzią główną repozytorium.

    git checkout main
    
  2. Pobierz najnowszą wersję kodu z usługi GitHub, która zawiera zmiany scalone we wcześniejszym ćwiczeniu.

    git pull
    
  3. Otwórz plik .github/workflows/pr-validation.yml w programie Visual Studio Code.

  4. W górnej części pliku poniżej name ustawienia dodaj concurrency ustawienie:

    name: pr-validation
    concurrency: ${{ github.event.number }}
    

    To ustawienie uniemożliwia jednoczesne uruchomienie wielu przepływów pracy dla tego samego żądania ściągnięcia, co może spowodować nieprzewidywalne wyniki podczas wdrażania zasobów na platformie Azure.

  5. W górnej części pliku w on sekcji definiującej wyzwalacz zdefiniuj sekcję permissions :

    name: pr-validation
    concurrency: ${{ github.event.number }}
    
    on: pull_request
    
    permissions:
      id-token: write
      contents: read
    
  6. permissions Poniżej sekcji dodaj dwie nowe zmienne środowiskowe:

    name: pr-validation
    concurrency: ${{ github.event.number }}
    
    on: pull_request
    
    permissions:
      id-token: write
      contents: read
    
    env:
      resourceGroupName: pr_${{ github.event.number }}
      resourceGroupLocation: westus3
    

    Zmienna resourceGroupName środowiskowa określa nazwę grupy zasobów, która powinna być używana dla każdego efemerycznego środowiska. Każda grupa zasobów będzie mieć nazwę pr_123, gdzie 123 jest unikatowym numerem żądania ściągnięcia.

    Zmienna resourceGroupLocation środowiskowa określa, że wszystkie środowiska efemeryczne powinny być wdrażane w regionie świadczenia usługi Azure Zachodnie stany USA 3.

  7. Zdefiniuj nowe zadanie o nazwie deploy, poniżej lint zadania:

    jobs:
      lint:
        uses: ./.github/workflows/lint.yml
    
      deploy:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v3
          - uses: azure/login@v1
            name: Sign in to Azure
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    

    Zadanie najpierw wyewidencjonuje cały kod w module uruchamiającym usługę GitHub, a następnie zaloguje się do środowiska platformy Azure.

    Napiwek

    Pliki YAML są wrażliwe na wcięcia. Bez względu na to, czy wpiszesz, czy wklejasz ten kod, upewnij się, że wcięcie jest poprawne. W dalszej części tego ćwiczenia zobaczysz kompletną definicję przepływu pracy YAML, aby sprawdzić, czy plik jest zgodny.

  8. Dodaj krok, aby utworzyć grupę zasobów o nazwie zdefiniowanej w zmiennej środowiskowej:

    - uses: Azure/cli@v1
      name: Create resource group
      with:
        inlineScript: |
          az group create \
            --name ${{ env.resourceGroupName }} \
            --location ${{ env.resourceGroupLocation }}
    
  9. Po kroku tworzenia grupy zasobów dodaj krok w celu wdrożenia pliku Bicep w grupie zasobów:

    - uses: azure/arm-deploy@v1
      id: deploy
      name: Deploy Bicep file
      with:
        failOnStdErr: false
        deploymentName: ${{ github.run_number }}
        resourceGroupName: ${{ env.resourceGroupName }}
        template: ./deploy/main.bicep
        parameters: >
          environmentType=Test
    
  10. Po kroku wdrażania dodaj krok, aby wyświetlić adres witryny internetowej środowiska efemerycznego w dzienniku przepływu pracy:

    - name: Show website hostname
      run: |
        echo "Access the website at this address: https://${{ steps.deploy.outputs.appServiceAppHostName }}"
    
  11. Zapisz zmiany.

  12. Sprawdź, czy plik pr-validation.yml wygląda następująco:

    name: pr-validation
    concurrency: ${{ github.event.number }}
    
    on: pull_request
    
    permissions:
      id-token: write
      contents: read
    
    env:
      resourceGroupName: pr_${{ github.event.number }}
      resourceGroupLocation: westus3
    
    jobs:
      lint:
        uses: ./.github/workflows/lint.yml
    
      deploy:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v3
          - uses: azure/login@v1
            name: Sign in to Azure
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
          - uses: Azure/cli@v1
            name: Create resource group
            with:
              inlineScript: |
                az group create \
                  --name ${{ env.resourceGroupName }} \
                  --location ${{ env.resourceGroupLocation }}
          - uses: azure/arm-deploy@v1
            id: deploy
            name: Deploy Bicep file
            with:
              failOnStdErr: false
              deploymentName: ${{ github.run_number }}
              resourceGroupName: ${{ env.resourceGroupName }}
              template: ./deploy/main.bicep
              parameters: >
                environmentType=Test
          - name: Show website hostname
            run: |
              echo "Access the website at this address: https://${{ steps.deploy.outputs.appServiceAppHostName }}"
    

    Jeśli tak nie jest, zaktualizuj go tak, aby był zgodny z tym przykładem, a następnie zapisz go.

  13. W terminalu programu Visual Studio Code zatwierdź zmiany. Nie wypchniesz ich jeszcze do repozytorium zdalnego.

    git add .
    git commit -m "Update pull request validation workflow to deploy an ephemeral environment"
    

Dodawanie przepływu pracy usuwania żądania ściągnięcia

Utworzono przepływ pracy, który automatycznie wdraża zmiany w każdym żądaniu ściągnięcia do efemerycznej grupy zasobów. Teraz skonfigurujesz drugi przepływ pracy w celu usunięcia środowisk efemerycznych, gdy nie będą już potrzebne.

  1. Utwórz nowy plik o nazwie pr-closed.yml w folderze .github/workflows .

    Zrzut ekranu programu Visual Studio Code przedstawiający zamknięty plik kropki P R Y M L w folderze przepływów pracy.

  2. W górnej części pliku nadaj przepływowi pracy nazwę , skonfiguruj ten sam klucz współbieżności, który był używany w przepływie pracy weryfikacji żądania ściągnięcia, skonfiguruj przepływ pracy do uruchomienia za każdym razem, gdy żądanie ściągnięcia zostanie zamknięte, i zezwól przepływowi pracy na uzyskanie tokenu dostępu:

    name: pr-closed
    concurrency: ${{ github.event.number }}
    
    on:
      pull_request:
        types: [closed]
    
    permissions:
      id-token: write
      contents: read
    
  3. Poniżej wprowadzonego kodu zdefiniuj zmienną środowiskową dla nazwy grupy zasobów skojarzonej ze środowiskiem efemerycznym żądania ściągnięcia:

    env:
      resourceGroupName: pr_${{ github.event.number }}
    

    Nazwa grupy zasobów jest taka sama jak nazwa użyta do przepływu pracy weryfikacji żądania ściągnięcia.

  4. Poniżej dodanego kodu zdefiniuj nowe zadanie o nazwie removei skonfiguruj je do logowania się na platformie Azure:

    jobs:
      remove:
        runs-on: ubuntu-latest
        steps:
          - uses: azure/login@v1
            name: Sign in to Azure
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
  5. W ramach remove zadania zdefiniuj krok usuwania grupy zasobów przy użyciu interfejsu wiersza polecenia platformy Azure i potwierdź usunięcie przy użyciu argumentu --yes :

    - uses: Azure/cli@v1
      name: Delete resource group
      with:
        inlineScript: |
          az group delete \
            --name ${{ env.resourceGroupName }} \
            --yes
    
  6. Zapisz zmiany.

  7. Sprawdź, czy plik pr-closed.yml wygląda następująco:

    name: pr-closed
    concurrency: ${{ github.event.number }}
    
    on:
      pull_request:
        types: [closed]
    
    permissions:
      id-token: write
      contents: read
    
    env:
      resourceGroupName: pr_${{ github.event.number }}
    
    jobs:
      remove:
        runs-on: ubuntu-latest
        steps:
          - uses: azure/login@v1
            name: Sign in to Azure
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
          - uses: Azure/cli@v1
            name: Delete resource group
            with:
              inlineScript: |
                az group delete \
                  --name ${{ env.resourceGroupName }} \
                  --yes
    

    Jeśli tak nie jest, zaktualizuj go tak, aby był zgodny z tym przykładem, a następnie zapisz go.

  8. W terminalu programu Visual Studio Code zatwierdź zmiany i wypchnij je do repozytorium zdalnego:

    git add .
    git commit -m 'Add pull request closed workflow'
    git push
    

Aktualizowanie pliku Bicep

Następnie zaktualizuj plik Bicep, aby użyć obrazu kontenera platformy Docker dla aplikacji witryny internetowej.

  1. W terminalu programu Visual Studio Code utwórz nową gałąź dla zmian, uruchamiając następujące polecenie:

    git checkout -b feature/container-app
    
  2. Otwórz plik main.bicep w folderze deploy.

  3. Zaktualizuj wartość zmiennej appServiceAppLinuxFrameworkVersion :

    var appServiceAppLinuxFrameworkVersion = 'DOCKER|dockersamples/static-site:latest'
    
  4. Zapisz zmiany.

  5. Zatwierdź i wypchnij zmiany do repozytorium Git, uruchamiając następujące polecenia w terminalu programu Visual Studio Code:

    git add .
    git commit -m "Use container image for website"
    git push origin feature/container-app
    

Tworzenie żądania ściągnięcia

Zdefiniowano przepływy pracy do automatycznego tworzenia środowisk efemerycznych i zarządzania nimi w żądaniach ściągnięcia. Teraz utworzysz kolejne żądanie ściągnięcia dla zmian Bicep.

  1. W przeglądarce wybierz pozycję Kod, a następnie wybierz 3 gałęzie.

    Zrzut ekranu usługi GitHub przedstawiający listę gałęzi repozytorium.

  2. W obszarze Gałęzie obok pozycji feature/container-app wybierz pozycję Nowe żądanie ściągnięcia.

    Zrzut ekranu usługi GitHub przedstawiający link umożliwiający utworzenie żądania ściągnięcia dla gałęzi aplikacji kontenera ukośnika funkcji.

  3. Wybierz pozycję Utwórz żądanie ściągnięcia.

Obejrzyj tworzenie efemerycznego środowiska

  1. Na stronie szczegółów żądania ściągnięcia poczekaj na wyświetlenie elementów sprawdzania stanu.

  2. Na liście obok zadania wdrażania wybierz pozycję Szczegóły.

    Zrzut ekranu przedstawiający żądanie ściągnięcia usługi GitHub, które pokazuje elementy sprawdzania stanu. Wyróżniono link

    Poczekaj na zakończenie tego procesu wdrożeniowego.

  3. Wybierz pozycję Pokaż nazwę hosta witryny sieci Web.

  4. Wybierz adres URL w dzienniku.

    Zrzut ekranu przedstawiający dziennik wdrażania funkcji GitHub Actions. Adres URL witryny internetowej w kroku Pokaż nazwę hosta witryny sieci Web został wyróżniony.

    Witryna internetowa ładuje i wyświetla komunikat Hello Docker! wskazujący, że witryna internetowa jest uruchomiona z obrazu kontenera zdefiniowanego w zmianie żądania ściągnięcia.

    Zrzut ekranu przedstawiający stronę główną witryny internetowej po zakończeniu wdrażania.

  5. Opcjonalnie otwórz witrynę Azure Portal i przejdź do grupy zasobów środowiska efemerycznego.

    Przejrzyj wdrożone zasoby: konto magazynu, usługę App Service i plan usługi App Service.

Scal żądanie ściągnięcia

Po przetestowaniu żądania ściągnięcia możesz scalić je z gałęzią główną .

  1. Wybierz pozycję Żądania ściągnięcia i wybierz pozycję Użyj obrazu kontenera dla żądania ściągnięcia witryny internetowej .

    Zrzut ekranu witryny GitHub przedstawiający listę otwartych żądań ściągnięcia w repozytorium.

    Testy stanu zostały pomyślnie zaliczone.

    Zrzut ekranu przedstawiający żądanie ściągnięcia w usłudze GitHub pokazujące, że te dwa testy stanu zostały pomyślnie zaewidencjonowane.

  2. Wybierz pozycję Scal żądanie ściągnięcia.

  3. Wybierz pozycję Potwierdź scalanie.

Przejrzyj usunięcie grupy zasobów

  1. W przeglądarce wybierz pozycję Akcje, a następnie w okienku po lewej stronie wybierz przepływ pracy z zamknięciem żądania ściągnięcia.

    Widać, że przepływ pracy został wywołany automatycznie, ponieważ żądanie ściągnięcia zostało zamknięte.

    Zrzut ekranu przedstawiający okienko Funkcji GitHub Actions z wyświetlonym działaniem zamkniętego przepływu pracy P R.

  2. Wybierz przepływ pracy, aby przejrzeć dziennik.

    Usunięcie grupy zasobów na platformie Azure może potrwać kilka minut.

    Ważne

    Nie musisz czekać na zakończenie przebiegu przepływu pracy. Pamiętaj jednak, aby otworzyć witrynę Azure Portal później, aby sprawdzić, czy grupa zasobów środowiska efemerycznego została pomyślnie usunięta i uniknąć ponoszenia kosztów dla zasobów platformy Azure.

Czyszczenie zasobów

Po zakończeniu pracy z modułem możesz usunąć utworzone zasoby:

  • Wpisy tajne usługi GitHub

    1. W repozytorium GitHub przejdź do pozycji Ustawienia>Wpisy tajne i zmienne>Akcje.
    2. Wybierz przycisk Usuń dla każdego wpisu tajnego repozytorium i postępuj zgodnie z monitami.
  • Repozytorium GitHub

    1. Przejdź do pozycji Ustawienia>ogólne
    2. Przewiń do dołu ekranu, wybierz pozycję Usuń to repozytorium i postępuj zgodnie z monitami.
  • aplikacja systemu Azure poświadczeń federacyjnych i jednostki usługi rejestracji.

    1. Na stronie głównej portalu wyszukaj ciąg Microsoft Entra ID i wybierz go z listy Usług.
    2. Przejdź do pozycji Zarządzaj> Rejestracje aplikacji.
    3. W obszarze Aplikacje należące wybierz pozycję toy-website-auto-review.
    4. Wybierz pozycję Usuń i postępuj zgodnie z monitami.
    5. Wybierz pozycję Usunięte aplikacje , aby trwale usunąć rejestrację aplikacji.

    Ważne

    Można mieć zduplikowane nazwy rejestracji aplikacji i nazwy główne usługi. Zaleca się zweryfikowanie identyfikatora aplikacji, aby upewnić się, że usuwasz prawidłowy zasób.