Ćwiczenie — tworzenie środowisk efemerycznych dla żądań ściągnięcia
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.
W terminalu programu Visual Studio Code zapoznaj się z gałęzią główną repozytorium.
git checkout main
Pobierz najnowszą wersję kodu z usługi GitHub, która zawiera zmiany scalone we wcześniejszym ćwiczeniu.
git pull
Otwórz plik .github/workflows/pr-validation.yml w programie Visual Studio Code.
W górnej części pliku poniżej
name
ustawienia dodajconcurrency
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.
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
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
, gdzie123
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.Zdefiniuj nowe zadanie o nazwie
deploy
, poniżejlint
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.
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 }}
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
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 }}"
Zapisz zmiany.
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.
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.
Utwórz nowy plik o nazwie pr-closed.yml w folderze .github/workflows .
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
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.
Poniżej dodanego kodu zdefiniuj nowe zadanie o nazwie
remove
i 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 }}
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
Zapisz zmiany.
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.
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.
W terminalu programu Visual Studio Code utwórz nową gałąź dla zmian, uruchamiając następujące polecenie:
git checkout -b feature/container-app
Otwórz plik main.bicep w folderze deploy.
Zaktualizuj wartość zmiennej
appServiceAppLinuxFrameworkVersion
:var appServiceAppLinuxFrameworkVersion = 'DOCKER|dockersamples/static-site:latest'
Zapisz zmiany.
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.
W przeglądarce wybierz pozycję Kod, a następnie wybierz 3 gałęzie.
W obszarze Gałęzie obok pozycji feature/container-app wybierz pozycję Nowe żądanie ściągnięcia.
Wybierz pozycję Utwórz żądanie ściągnięcia.
Obejrzyj tworzenie efemerycznego środowiska
Na stronie szczegółów żądania ściągnięcia poczekaj na wyświetlenie elementów sprawdzania stanu.
Na liście obok zadania wdrażania wybierz pozycję Szczegóły.
Poczekaj na zakończenie tego procesu wdrożeniowego.
Wybierz pozycję Pokaż nazwę hosta witryny sieci Web.
Wybierz adres URL w dzienniku.
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.
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ą .
Wybierz pozycję Żądania ściągnięcia i wybierz pozycję Użyj obrazu kontenera dla żądania ściągnięcia witryny internetowej .
Testy stanu zostały pomyślnie zaliczone.
Wybierz pozycję Scal żądanie ściągnięcia.
Wybierz pozycję Potwierdź scalanie.
Przejrzyj usunięcie grupy zasobów
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.
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
- W repozytorium GitHub przejdź do pozycji Ustawienia>Wpisy tajne i zmienne>Akcje.
- Wybierz przycisk Usuń dla każdego wpisu tajnego repozytorium i postępuj zgodnie z monitami.
Repozytorium GitHub
- Przejdź do pozycji Ustawienia>ogólne
- 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.
- Na stronie głównej portalu wyszukaj ciąg Microsoft Entra ID i wybierz go z listy Usług.
- Przejdź do pozycji Zarządzaj> Rejestracje aplikacji.
- W obszarze Aplikacje należące wybierz pozycję toy-website-auto-review.
- Wybierz pozycję Usuń i postępuj zgodnie z monitami.
- 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.