Ćwiczenie — tworzenie tymczasowych środowisk dla żądań pull requestów

Ukończone

Niektórzy członkowie zespołu powiedzieli, że doceniają otrzymywanie zautomatyzowanych informacji zwrotnych od lintera Bicep na temat zmian kodu, zanim wyślą je do innych członków zespołu do przeglądu. 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 pull requestu. Przetestujesz swoje zmiany, tworząc pull request dla swojej witryny, aby użyć obrazu kontenera Docker.

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

  • Zaktualizuj przepływ pracy żądania pull, aby wdrożyć środowisko tymczasowe.
  • Utwórz przepływ pracy usuwania pull requestu, 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 tymczasowego.

Zaktualizuj przepływ pracy żądania ściągnięcia zmian, aby wdrożyć efemeryczne środowisko

W celu rozpoczęcia, należy zaktualizować pr-workflow, 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 ustawienia name, dodaj ustawienie concurrency:

    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 środowiskowa resourceGroupLocation określa, że wszystkie środowiska efemeryczne powinny być wdrażane w regionie Azure West US 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 prześlesz ich jeszcze do repozytorium zdalnego.

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

Dodaj przepływ pracy usuwania pull requestu

Stworzyłeś przepływ pracy, który automatycznie wdraża zmiany w każdej prośbie o przełączenie do tymczasowej 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 ta, której użyłeś do workflow 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 Docker dla aplikacji 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
    

Utwórz żądanie ściągnięcia

Zdefiniowano przepływy pracy do automatycznego tworzenia środowisk efemerycznych i zarządzania nimi w pull requestach. Teraz utworzysz kolejny wniosek o pobranie 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 sekcji Twoje gałęzie, obok feature/container-app, wybierz Nowe żądanie ściągnięcia.

    Zrzut ekranu GitHub, który pokazuje link do utworzenia pull requesta dla gałęzi feature/slash container app.

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

Zobacz, jak tworzone jest efemeryczne środowisko

  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 ładuje się i wyświetla komunikat Hello Docker!, wskazując, że działa z obrazu kontenera zdefiniowanego w zmianie pull requestu.

    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 wniosek o scalenie

Po przetestowaniu pull requestu, możesz scalić go 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 GitHub przedstawiający listę otwartych pull requestów w repozytorium.

    Kontrola stanu została pomyślnie zakończona.

    Zrzut ekranu przedstawiający pull request w usłudze GitHub pokazujący, że te dwie kontrole stanu zostały zaliczone pomyślnie.

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

  3. Wybierz Potwierdź scalanie.

Przejrzyj usunięcie grupy zasobów

  1. W przeglądarce wybierz Akcje, a następnie w lewym panelu wybierz przepływ pracy pr-closed.

    Widać, że przepływ pracy został uruchomiony automatycznie, ponieważ pull request został zamknięty.

    Zrzut ekranu przedstawiający okno GitHub Actions, pokazujące działanie 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 procesu 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:

  • Tajne dane GitHub

    1. W repozytorium GitHub przejdź do Ustawienia>Sekrety i zmienne>Akcje.
    2. Wybierz przycisk Usuń dla każdego sekretu repozytorium i postępuj zgodnie z instrukcjami.
  • Repozytorium GitHub

    1. Przejdź do Ustawienia>Ogólne
    2. Przewiń do dołu ekranu, wybierz pozycję Usuń to repozytorium i postępuj zgodnie z instrukcjami.
  • Poświadczenia federacyjne i obiekt usługi powiązany z rejestracją aplikacji Azure.

    1. Na stronie głównej portalu wyszukaj ciąg Microsoft Entra ID i wybierz go z listy Usług.
    2. Przejdź do Zarządzaj>Rejestracje aplikacji.
    3. W zakładce 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.