Ćwiczenie — konfigurowanie środowiska

Ukończone

Ważne

Do wykonania tego ćwiczenia potrzebna jest własna subskrypcja platformy Azure. Ponadto mogą zostać naliczone opłaty. Jeśli nie masz jeszcze subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Zanim zaczniesz pracować nad przepływem pracy witryny sieci Web firmowej toy, musisz skonfigurować środowisko. W tej lekcji upewnij się, że środowiska platformy Azure i usługi GitHub zostały skonfigurowane w celu ukończenia pozostałej części tego modułu.

Aby osiągnąć te cele, wykonasz następujące czynności:

  • Skonfiguruj repozytorium GitHub dla tego modułu.
  • Sklonuj repozytorium projektu na komputer.
  • Utwórz dwie tożsamości obciążeń w identyfikatorze Entra firmy Microsoft.
  • Utwórz dwie grupy zasobów na platformie Azure.
  • Utwórz dwa wpisy tajne i środowiska w usłudze GitHub.

Pobieranie repozytorium GitHub

W tym miejscu upewnij się, że repozytorium GitHub zostało skonfigurowane w celu ukończenia pozostałej części tego modułu. Konfigurujesz je, tworząc nowe repozytorium na podstawie repozytorium szablonów. Repozytorium szablonów zawiera pliki potrzebne do rozpoczęcia pracy z tym modułem.

Moduły w tej ścieżce szkoleniowej są częścią postępu. Do celów szkoleniowych każdy moduł ma skojarzone repozytorium szablonów usługi GitHub.

Napiwek

Nawet jeśli poprzedni moduł został ukończony w ścieżce szkoleniowej, postępuj zgodnie z tymi instrukcjami, aby utworzyć nowe repozytorium i upewnić się, że nadasz mu nową nazwę.

Rozpoczynanie od repozytorium szablonów

Uruchom szablon, który konfiguruje repozytorium GitHub.

W witrynie usługi GitHub wykonaj następujące kroki, aby utworzyć repozytorium na podstawie szablonu:

  1. Wybierz pozycję Użyj tego szablonu>Utwórz nowe repozytorium.

    Zrzut ekranu interfejsu usługi GitHub przedstawiający repozytorium szablonu z wyróżnionym przyciskiem

  2. Zanotuj nazwę użytkownika lub organizację usługi GitHub. W tym przykładzie nazwa użytkownika usługi GitHub to mygithubuser. Ta nazwa będzie potrzebna wkrótce.

  3. Wprowadź nazwę nowego projektu, taką jak toy-website-environments.

  4. Wybierz opcję Publiczna.

    Podczas tworzenia własnych repozytoriów warto utworzyć je jako prywatne. W tym module będziesz pracować z niektórymi funkcjami usługi GitHub, które działają tylko z repozytoriami publicznymi i kontami GitHub Enterprise.

  5. Wybierz pozycję Utwórz repozytorium na podstawie szablonu.

    Zrzut ekranu przedstawiający interfejs usługi GitHub przedstawiający stronę tworzenia repozytorium.

Ważne

Ostatnie ćwiczenie w tym module zawiera ważne kroki oczyszczania. Pamiętaj, aby wykonać kroki oczyszczania, nawet jeśli nie ukończysz tego modułu.

Aby wyczyścić zasoby bez ukończenia modułu, uruchom następujące polecenia w terminalu programu Visual Studio Code:

az group delete --resource-group ToyWebsiteTest --yes --no-wait
az group delete --resource-group ToyWebsiteProduction --yes --no-wait

Grupa zasobów jest usuwana w tle.

Remove-AzResourceGroup -Name ToyWebsiteTest -Force
Remove-AzResourceGroup -Name ToyWebsiteProduction -Force

Klonowanie repozytorium

Masz teraz kopię repozytorium szablonów na własnym koncie. Następnie sklonuj to repozytorium lokalnie, aby rozpocząć pracę w nim.

  1. Wybierz pozycję Kod i wybierz ikonę kopiowania.

    Zrzut ekranu przedstawiający interfejs usługi GitHub przedstawiający nowe repozytorium z wyróżnionym przyciskiem kopiowania repozytorium U R L.

  2. Otwórz Visual Studio Code.

  3. Otwórz okno terminalu programu Visual Studio Code, wybierając pozycję Terminal>Nowy terminal. Okno jest zwykle otwierane w dolnej części ekranu.

  4. Przejdź do terminalu do katalogu, w którym chcesz sklonować repozytorium GitHub na komputerze lokalnym. Aby na przykład sklonować repozytorium do folderu toy-website-environments , uruchom następujące polecenie:

    cd toy-website-environments
    
  5. Wpisz git clone i wklej skopiowany wcześniej adres URL, który wygląda następująco:

    git clone https://github.com/mygithubuser/toy-website-environments.git
    
  6. Otwórz ponownie program Visual Studio Code w folderze repozytorium, uruchamiając następujące polecenie w terminalu programu Visual Studio Code:

    code -r toy-website-environments
    

Logowanie się do platformy Azure

Aby pracować z grupami zasobów na platformie Azure, zaloguj się do konta platformy Azure z poziomu terminalu programu Visual Studio Code. Upewnij się, że zainstalowano narzędzia interfejsu wiersza polecenia platformy Azure.

  1. W menu Terminal wybierz pozycję Nowy terminal. Okno terminalu zwykle otwiera się w dolnej połowie ekranu.

  2. Domyślna powłoka to zazwyczaj pwsh, jak pokazano po prawej stronie okna terminalu.

    Zrzut ekranu przedstawiający okno terminalu programu Visual Studio Code z pozycją p w s h wyświetlaną jako opcja powłoki.

  3. Wybierz listę rozwijaną powłoki, a następnie wybierz pozycję Azure Cloud Shell (bash).

    Zrzut ekranu przedstawiający okno terminalu programu Visual Studio Code z wyświetloną listą rozwijaną powłoki terminalu i wybraną pozycją Azure Cloud Shell (bash).

  4. Zostanie otwarta nowa powłoka.

Logowanie się do platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure

  1. W terminalu programu Visual Studio Code uruchom następujące polecenie, aby zalogować się na platformie Azure:

    az login
    
  2. W przeglądarce, która zostanie otwarta, zaloguj się do konta platformy Azure.

Aby pracować z grupami zasobów na platformie Azure, zaloguj się do konta platformy Azure z poziomu terminalu programu Visual Studio Code. Upewnij się, że zainstalowano program Azure PowerShell.

  1. W menu Terminal wybierz pozycję Nowy terminal. Okno terminalu zwykle otwiera się w dolnej połowie ekranu.

  2. Domyślna powłoka to zazwyczaj pwsh, jak pokazano po prawej stronie okna terminalu.

    Zrzut ekranu przedstawiający okno terminalu programu Visual Studio Code z pozycją p w s h wyświetlaną jako opcja powłoki.

  3. Wybierz listę rozwijaną powłoki, a następnie wybierz pozycję Azure Cloud Shell (PowerShell).

    Zrzut ekranu przedstawiający okno terminalu programu Visual Studio Code z wyświetloną listą rozwijaną powłoki terminalu i wybraną pozycją Azure Cloud Shell (PowerShell).

  4. Zostanie otwarta nowa powłoka.

Logowanie się na platformie Azure przy użyciu programu Azure PowerShell

  1. W terminalu programu Visual Studio Code uruchom następujące polecenie, aby zalogować się na platformie Azure:

    Connect-AzAccount
    
  2. W przeglądarce, która zostanie otwarta, zaloguj się do konta platformy Azure.

Tworzenie dwóch tożsamości obciążeń

Następnie utwórz dwie tożsamości obciążeń w usłudze Microsoft Entra ID: jedną dla środowiska testowego, a drugą dla środowiska produkcyjnego.

Aby utworzyć tożsamości obciążeń, polecenia interfejsu wiersza polecenia platformy Azure służą jq do analizowania danych z danych wyjściowych JSON. Jeśli nie jq zainstalowano programu , możesz użyć powłoki Bash w usłudze Azure Cloud Shell , aby utworzyć tożsamość obciążenia, grupę zasobów i przypisanie roli oraz przygotować wpisy tajne usługi GitHub.

  1. Uruchom następujący kod, aby zdefiniować zmienne dla nazwy użytkownika usługi GitHub i nazwy repozytorium. Upewnij się, że zastąp mygithubuser ciąg nazwą użytkownika usługi GitHub zanotowaną wcześniej w tym ćwiczeniu. Upewnij się również, że określono poprawną nazwę repozytorium GitHub.

    githubOrganizationName='mygithubuser'
    githubRepositoryName='toy-website-environments'
    
  2. Utwórz tożsamość obciążenia dla wdrożeń w środowisku testowym. Tożsamość obciążenia wymaga dwóch poświadczeń federacyjnych: jeden jest używany, gdy przepływ pracy uruchamia zadanie weryfikacji , ponieważ to zadanie nie jest skojarzone ze środowiskiem Usługi GitHub. Drugi jest używany, gdy przepływ pracy uruchamia zadanie wdrażania , które jest uruchamiane w środowisku Test GitHub.

    testApplicationRegistrationDetails=$(az ad app create --display-name 'toy-website-environments-test')
    testApplicationRegistrationObjectId=$(echo $testApplicationRegistrationDetails | jq -r '.id')
    testApplicationRegistrationAppId=$(echo $testApplicationRegistrationDetails | jq -r '.appId')
    
    az ad app federated-credential create \
       --id $testApplicationRegistrationObjectId \
       --parameters "{\"name\":\"toy-website-environments-test\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:environment:Test\",\"audiences\":[\"api://AzureADTokenExchange\"]}"
    
    az ad app federated-credential create \
       --id $testApplicationRegistrationObjectId \
       --parameters "{\"name\":\"toy-website-environments-test-branch\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:ref:refs/heads/main\",\"audiences\":[\"api://AzureADTokenExchange\"]}"
    
  3. Uruchom następujący kod, który tworzy podobną tożsamość obciążenia i poświadczenia federacyjne dla środowiska produkcyjnego:

    productionApplicationRegistrationDetails=$(az ad app create --display-name 'toy-website-environments-production')
    productionApplicationRegistrationObjectId=$(echo $productionApplicationRegistrationDetails | jq -r '.id')
    productionApplicationRegistrationAppId=$(echo $productionApplicationRegistrationDetails | jq -r '.appId')
    
    az ad app federated-credential create \
       --id $productionApplicationRegistrationObjectId \
       --parameters "{\"name\":\"toy-website-environments-production\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:environment:Production\",\"audiences\":[\"api://AzureADTokenExchange\"]}"
    
    az ad app federated-credential create \
       --id $productionApplicationRegistrationObjectId \
       --parameters "{\"name\":\"toy-website-environments-production-branch\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:ref:refs/heads/main\",\"audiences\":[\"api://AzureADTokenExchange\"]}"
    
  1. Uruchom następujący kod, aby zdefiniować zmienne dla nazwy użytkownika usługi GitHub i nazwy repozytorium. Upewnij się, że zastąp mygithubuser ciąg nazwą użytkownika usługi GitHub zanotowaną wcześniej w tym ćwiczeniu. Upewnij się również, że określono poprawną nazwę repozytorium GitHub.

    $githubOrganizationName = 'mygithubuser'
    $githubRepositoryName = 'toy-website-environments'
    
  2. Uruchom następujący kod, który tworzy tożsamość obciążenia dla środowiska testowego i kojarzy go z repozytorium GitHub:

    $testApplicationRegistration = New-AzADApplication -DisplayName 'toy-website-environments-test'
    New-AzADAppFederatedCredential `
       -Name 'toy-website-environments-test' `
       -ApplicationObjectId $testApplicationRegistration.Id `
       -Issuer 'https://token.actions.githubusercontent.com' `
       -Audience 'api://AzureADTokenExchange' `
       -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):environment:Test"
    New-AzADAppFederatedCredential `
       -Name 'toy-website-environments-test-branch' `
       -ApplicationObjectId $testApplicationRegistration.Id `
       -Issuer 'https://token.actions.githubusercontent.com' `
       -Audience 'api://AzureADTokenExchange' `
       -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):ref:refs/heads/main"
    
  3. Uruchom następujący kod, który jest zgodny z podobnym procesem dla środowiska produkcyjnego:

    $productionApplicationRegistration = New-AzADApplication -DisplayName 'toy-website-environments-production'
    New-AzADAppFederatedCredential `
       -Name 'toy-website-environments-production' `
       -ApplicationObjectId $productionApplicationRegistration.Id `
       -Issuer 'https://token.actions.githubusercontent.com' `
       -Audience 'api://AzureADTokenExchange' `
       -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):environment:Production"
    New-AzADAppFederatedCredential `
       -Name 'toy-website-environments-production-branch' `
       -ApplicationObjectId $productionApplicationRegistration.Id `
       -Issuer 'https://token.actions.githubusercontent.com' `
       -Audience 'api://AzureADTokenExchange' `
       -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):ref:refs/heads/main"
    

Tworzenie dwóch grup zasobów na platformie Azure i udzielanie dostępu tożsamości obciążenia

Następnie utwórz grupę zasobów dla każdego środowiska. Ten proces przyznaje również odpowiednią tożsamość obciążenia rolę Współautor w grupie zasobów, która umożliwia wdrożenie przepływu pracy w grupie zasobów.

  1. Aby utworzyć grupę zasobów środowiska testowego i udzielić tożsamości obciążenia dostępu do niej, uruchom następujące polecenia interfejsu wiersza polecenia platformy Azure w terminalu programu Visual Studio Code:

    testResourceGroupResourceId=$(az group create --name ToyWebsiteTest --location eastus --query id --output tsv)
    
    az ad sp create --id $testApplicationRegistrationObjectId
    az role assignment create \
       --assignee $testApplicationRegistrationAppId \
       --role Contributor \
       --scope $testResourceGroupResourceId
    
  2. Uruchom podobny proces, aby utworzyć grupę zasobów środowiska produkcyjnego:

    productionResourceGroupResourceId=$(az group create --name ToyWebsiteProduction --location eastus --query id --output tsv)
    
    az ad sp create --id $productionApplicationRegistrationObjectId
    az role assignment create \
       --assignee $productionApplicationRegistrationAppId \
       --role Contributor \
       --scope $productionResourceGroupResourceId
    
  1. Aby utworzyć grupę zasobów środowiska testowego i udzielić tożsamości obciążenia dostępu do niej, uruchom następujące polecenia programu Azure PowerShell w terminalu programu Visual Studio Code:

    $testResourceGroup = New-AzResourceGroup -Name ToyWebsiteTest -Location eastus
    
    New-AzADServicePrincipal -AppId $($testApplicationRegistration.AppId)
    New-AzRoleAssignment `
       -ApplicationId $($testApplicationRegistration.AppId) `
       -RoleDefinitionName Contributor `
       -Scope $($testResourceGroup.ResourceId)
    
  2. Uruchom podobny proces, aby utworzyć grupę zasobów środowiska produkcyjnego:

    $productionResourceGroup = New-AzResourceGroup -Name ToyWebsiteProduction -Location eastus
    
    New-AzADServicePrincipal -AppId $($productionApplicationRegistration.AppId)
    New-AzRoleAssignment `
       -ApplicationId $($productionApplicationRegistration.AppId) `
       -RoleDefinitionName Contributor `
       -Scope $($productionResourceGroup.ResourceId)
    

Przygotowywanie wpisów tajnych usługi GitHub

Uruchom następujący kod, aby wyświetlić wartości, które należy utworzyć jako wpisy tajne usługi GitHub:

echo "AZURE_CLIENT_ID_TEST: $testApplicationRegistrationAppId"
echo "AZURE_CLIENT_ID_PRODUCTION: $productionApplicationRegistrationAppId"
echo "AZURE_TENANT_ID: $(az account show --query tenantId --output tsv)"
echo "AZURE_SUBSCRIPTION_ID: $(az account show --query id --output tsv)"
$azureContext = Get-AzContext
Write-Host "AZURE_CLIENT_ID_TEST: $($testApplicationRegistration.AppId)"
Write-Host "AZURE_CLIENT_ID_PRODUCTION: $($productionApplicationRegistration.AppId)"
Write-Host "AZURE_TENANT_ID: $($azureContext.Tenant.Id)"
Write-Host "AZURE_SUBSCRIPTION_ID: $($azureContext.Subscription.Id)"

Tworzenie wpisów tajnych usługi GitHub

Utworzono dwie tożsamości obciążenia i grupy zasobów, w których zostaną wdrożone. Następnie utwórz wpisy tajne w funkcji GitHub Actions.

  1. W przeglądarce przejdź do repozytorium GitHub.

  2. Wybierz pozycję Ustawienia> Secrets i zmienne>Akcje.

  3. Wybierz pozycję Nowy wpis tajny repozytorium.

    Zrzut ekranu interfejsu usługi GitHub przedstawiający stronę

  4. Nadaj nazwę AZURE_CLIENT_ID_TEST wpisu tajnego.

  5. W polu Wartość wklej identyfikator GUID z pierwszego wiersza danych wyjściowych terminalu. Nie dołączaj AZURE_CLIENT_ID_TEST, dwukropka ani żadnych spacji w wartości.

  6. Wybierz przycisk Add secret (Dodaj wpis tajny).

    Zrzut ekranu interfejsu usługi GitHub przedstawiający stronę

  7. Powtórz ten proces, aby utworzyć wpisy tajne dla AZURE_CLIENT_ID_PRODUCTION, AZURE_TENANT_ID i AZURE_SUBSCRIPTION_ID, kopiując wartości z odpowiednich pól w danych wyjściowych terminalu.

  8. Sprawdź, czy lista wpisów tajnych zawiera teraz wszystkie cztery wpisy tajne.

    Zrzut ekranu przedstawiający interfejs usługi GitHub z listą wpisów tajnych, w tym zarówno wpisów tajnych testowych, jak i produkcyjnych.

Tworzenie środowisk w usłudze GitHub

  1. W przeglądarce przejdź do Ustawienia> Środowisko.

  2. Wybierz pozycję Nowe środowisko.

    Zrzut ekranu przedstawiający interfejs usługi GitHub przedstawiający stronę Środowiska i przycisk tworzenia środowiska.

  3. Wprowadź wartość Test jako nazwę środowiska.

    Zrzut ekranu przedstawiający stronę usługi GitHub dla nowego środowiska o nazwie Test z przyciskiem Konfiguruj środowisko.

  4. Wybierz pozycję Konfiguruj środowisko.

  5. Wybierz pozycję Środowiska , aby powrócić do listy środowisk.

    Zrzut ekranu przedstawiający stronę usługi GitHub dla nowego środowiska o nazwie Test z linkiem Środowisko.

  6. Powtórz ten proces, aby utworzyć inne środowisko o nazwie Production.

    Pozostaw otwartą stronę konfiguracji środowiska produkcyjnego.

Dodawanie reguły ochrony do środowiska produkcyjnego

  1. Wybierz pozycję Wymagane recenzenci.

  2. W polu tekstowym Wyszukaj osoby lub zespoły wpisz własną nazwę użytkownika usługi GitHub i wybierz siebie.

    Zrzut ekranu przedstawiający interfejs usługi GitHub przedstawiający stronę dodawania wymaganego recenzenta z wypełnionymi szczegółami i przyciskiem Zapisz reguły ochrony.

  3. Wybierz pozycję Zapisz reguły ochrony.

  4. Wybierz pozycję Środowiska , aby zakończyć konfigurację.