Ćwiczenie — używanie parametrów Bicep z wieloma środowiskami
Teraz, gdy przepływ pracy jest wdrażany w obu środowiskach, możesz przystąpić do integracji z interfejsem API innej firmy na potrzeby przeglądów produktów.
Twój zespół witryny internetowej udostępnił Ci klucze interfejsu API i adresy URL, których witryna internetowa powinna używać do uzyskiwania dostępu do usługi. Istnieją różne wartości używane w środowiskach testowych i produkcyjnych. W tej lekcji zaktualizujesz przepływ pracy, aby skonfigurować poszczególne środowiska przy użyciu poprawnych ustawień interfejsu API przeglądu produktu.
Podczas tego procesu wykonasz następujące czynności:
- Utwórz wpisy tajne dla kluczy interfejsu API przeglądu dla każdego środowiska.
- Zaktualizuj przepływ pracy przy użyciu prawidłowych wartości wejściowych i tajnych dla każdego środowiska.
- Zaktualizuj plik Bicep, aby propagować ustawienia potrzebne dla interfejsu API przeglądu produktu.
- Przejrzyj wyniki przepływu pracy i zmiany w środowisku platformy Azure.
Dodawanie wpisów tajnych
Decydujesz się na przechowywanie kluczy interfejsu API w wpisach tajnych usługi GitHub, aby upewnić się, że są one odpowiednio chronione.
W przeglądarce przejdź do pozycji Ustawienia>Wpisy tajne i zmienne>Akcje.
Wybierz przycisk Nowy wpis tajny repozytorium.
Wprowadź REVIEW_API_KEY_TEST jako nazwę wpisu tajnego i wartość sandboxsecretkey .
Wybierz przycisk Add secret (Dodaj wpis tajny).
Powtórz proces, aby dodać inny wpis tajny o nazwie REVIEW_API_KEY_PRODUCTION jako nazwę wpisu tajnego, a wartość productionsecretkey . Wybierz przycisk Add secret (Dodaj wpis tajny).
Zaktualizuj plik deploy.yml, aby używać nowych ustawień
W programie Visual Studio Code otwórz plik deploy.yml .
Zaktualizuj wyzwalacz przepływu pracy, aby uwzględnić nowe wartości dla
inputs
ustawień i :secrets
on: workflow_call: inputs: environmentType: required: true type: string resourceGroupName: required: true type: string reviewApiUrl: required: true type: string secrets: AZURE_CLIENT_ID: required: true AZURE_TENANT_ID: required: true AZURE_SUBSCRIPTION_ID: required: true reviewApiKey: required: true
Zwróć uwagę, że adresy URL interfejsu API są uwzględniane jako dane wejściowe, ponieważ nie są to wartości wpisów tajnych.
W zadaniu
validate
zaktualizuj kroki, aby uwzględnić nowe parametry wdrożenia:jobs: validate: 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 }} - if: inputs.environmentType != 'Production' uses: azure/arm-deploy@v1 name: Run preflight validation with: deploymentName: ${{ github.run_number }} resourceGroupName: ${{ inputs.resourceGroupName }} template: ./deploy/main.bicep parameters: > environmentType=${{ inputs.environmentType }} reviewApiUrl=${{ inputs.reviewApiUrl }} reviewApiKey=${{ secrets.reviewApiKey }} deploymentMode: Validate - if: inputs.environmentType == 'Production' uses: azure/arm-deploy@v1 name: Run what-if with: failOnStdErr: false resourceGroupName: ${{ inputs.resourceGroupName }} template: ./deploy/main.bicep parameters: > environmentType=${{ inputs.environmentType }} reviewApiUrl=${{ inputs.reviewApiUrl }} reviewApiKey=${{ secrets.reviewApiKey }} additionalArguments: --what-if
Zaktualizuj zadanie w
deploy
celu uwzględnienia nowych parametrów wdrożenia:deploy: needs: validate environment: ${{ inputs.environmentType }} runs-on: ubuntu-latest outputs: appServiceAppHostName: ${{ steps.deploy.outputs.appServiceAppHostName }} 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/arm-deploy@v1 id: deploy name: Deploy Bicep file with: failOnStdErr: false deploymentName: ${{ github.run_number }} resourceGroupName: ${{ inputs.resourceGroupName }} template: ./deploy/main.bicep parameters: > environmentType=${{ inputs.environmentType }} reviewApiUrl=${{ inputs.reviewApiUrl }} reviewApiKey=${{ secrets.reviewApiKey }}
Zapisz zmiany w pliku.
Zaktualizuj plik workflow.yml, aby udostępnić nowe ustawienia
W programie Visual Studio Code otwórz plik workflow.yml .
reviewApiUrl
Dodaj dane wejściowe ireviewApiKey
wpisy tajne dla każdego środowiska:name: deploy-toy-website-environments concurrency: toy-company on: push: branches: - main workflow_dispatch: permissions: id-token: write contents: read jobs: # Lint the Bicep file. lint: uses: ./.github/workflows/lint.yml # Deploy to the test environment. deploy-test: uses: ./.github/workflows/deploy.yml needs: lint with: environmentType: Test resourceGroupName: ToyWebsiteTest reviewApiUrl: https://sandbox.contoso.com/reviews secrets: AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID_TEST }} AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} reviewApiKey: ${{ secrets.REVIEW_API_KEY_TEST }} # Deploy to the production environment. deploy-production: uses: ./.github/workflows/deploy.yml needs: deploy-test with: environmentType: Production resourceGroupName: ToyWebsiteProduction reviewApiUrl: https://api.contoso.com/reviews secrets: AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID_PRODUCTION }} AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} reviewApiKey: ${{ secrets.REVIEW_API_KEY_PRODUCTION }}
Zapisz zmiany w pliku.
Aktualizowanie pliku Bicep
Otwórz plik main.bicep.
Poniżej parametrów, które znajdują się już w pliku, dodaj następujące parametry dla nowego interfejsu API przeglądu:
@description('The URL to the product review API.') param reviewApiUrl string @secure() @description('The API key to use when accessing the product review API.') param reviewApiKey string
Zaktualizuj definicję
appServiceApp
zasobu, aby podać adres URL i klucz interfejsu API przeglądu aplikacji, aby kod witryny internetowej mógł ich używać:resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'APPINSIGHTS_INSTRUMENTATIONKEY' value: applicationInsights.properties.InstrumentationKey } { name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' value: applicationInsights.properties.ConnectionString } { name: 'ReviewApiUrl' value: reviewApiUrl } { name: 'ReviewApiKey' value: reviewApiKey } ] } } }
Zapisz zmiany w pliku.
Zatwierdź i wypchnij zmiany do repozytorium Git przy użyciu następujących poleceń:
git add . git commit -m "Add new review API settings to Bicep file and workflow" git push
Przeglądanie wyników wdrożenia
W przeglądarce przejdź do przebiegów przepływu pracy.
Wybierz najnowszy przebieg.
Wybierz najnowszy przebieg przepływu pracy.
Poczekaj na wstrzymanie przepływu pracy przed wdrożeniem /wdrożeniem zadania. Osiągnięcie tego punktu przez przepływ pracy może potrwać kilka minut.
Zatwierdź wdrożenie w środowisku produkcyjnym, wybierając pozycję Przejrzyj wdrożenia, a następnie wybierając pozycję Produkcja , a następnie pozycję Zatwierdź i wdróż.
Poczekaj na zakończenie działania przepływu pracy.
Wybierz pozycję Kod , a następnie wybierz środowisko produkcyjne .
Zauważ, że w historii środowiska jest teraz widocznych wiele wdrożeń.
W przeglądarce przejdź do witryny Azure Portal.
Przejdź do grupy zasobów ToyWebsiteProduction .
Na liście zasobów otwórz aplikację usługi aplikacja systemu Azure Service.
Wybierz pozycję Konfiguracja.
Wybierz pozycję Pokaż wartości.
Zwróć uwagę, że wartości ustawień ReviewApiKey i ReviewApiUrl są ustawione na wartości skonfigurowane dla środowiska produkcyjnego.
Porównaj bieżące wartości z ustawieniami konfiguracji aplikacji usługi App Service w grupie zasobów ToyWebsiteTest . Zwróć uwagę, że wartości są różne.
Oczyszczanie zasobów
Po ukończeniu ćwiczenia możesz usunąć zasoby, aby nie były naliczane opłaty.
W terminalu programu Visual Studio Code uruchom następujące polecenia:
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