Cvičení – použití parametrů Bicep s několika prostředími
Teď, když se kanál nasadí do obou vašich prostředí, jste připraveni integrovat se rozhraním API třetích stran pro recenze produktů.
Váš webový tým vám poskytl klíče rozhraní API a adresy URL, které by váš web měl použít pro přístup ke službě. Pro použití testovacího a produkčního prostředí existují různé hodnoty. V této lekci aktualizujete kanál tak, aby nakonfigurovali všechna vaše prostředí se správnými nastaveními pro rozhraní API pro kontrolu produktů.
Během tohoto procesu:
- Vytvořte skupiny proměnných pro každé prostředí.
- Aktualizujte kanál tak, aby místo použití parametrů šablony chytá správnou skupinu proměnných pro každé prostředí.
- Aktualizujte soubor Bicep, aby se rozšířilo nastavení, které potřebujete pro rozhraní API pro kontrolu produktu.
- Aktualizujte skupinu proměnných a kanál tak, aby nastavily hodnoty pro nastavení rozhraní API pro kontrolu produktu.
- Zkontrolujte výsledky kanálu a změny ve vašem prostředí Azure.
Přidání skupin proměnných
Protože přidáváte další parametry, které se mezi jednotlivými prostředími liší, rozhodnete se odejít od přidávání parametrů kanálu přímo do souborů YAML kanálu. Místo toho použijete skupinu proměnných k udržení hodnot pro každé prostředí společně.
V prohlížeči přejděte do knihovny Pipelines>.
Vyberte tlačítko + Proměnná skupina.
Jako název skupiny proměnných zadejte ToyWebsiteTest .
Vyberte tlačítko + Přidat a přidejte proměnné do skupiny proměnných. Vytvořte dvě proměnné s následujícím nastavením:
Jméno Hodnota EnvironmentType Test ResourceGroupName ToyWebsiteTest Všimněte si, že ve skupině proměnných nedefinujete název připojení služby. Názvy připojení služeb mají zvláštní pravidla o tom, jak je lze zadat. V tomto modulu použijete parametry šablony kanálu.
Zvolte Uložit.
Výběrem tlačítka Zpět v prohlížeči se vraťte do seznamu skupin proměnných.
Přidejte další skupinu proměnných s názvem ToyWebsiteProduction. Vytvořte dvě proměnné s následujícím nastavením:
Jméno Hodnota EnvironmentType Výroba ResourceGroupName ToyWebsiteProduction Všimněte si, že názvy proměnných jsou pro obě prostředí stejné, ale hodnoty se liší.
Uložte skupinu produkčních proměnných.
Aktualizace šablony kanálu nasazení tak, aby používala skupinu proměnných
V editoru Visual Studio Code otevřete soubor deploy.yml .
V horní části souboru odeberte parametry a
resourceGroupName
parametryserviceConnectionName
. NeodstraňovatenvironmentType
parametry.deploymentDefaultLocation
parameters: - name: environmentType type: string - name: deploymentDefaultLocation type: string default: westus3
ValidateBicepCode
Aktualizujte úlohu pro import skupiny proměnných:- ${{ if ne(parameters.environmentType, 'Production') }}: - stage: Validate_${{parameters.environmentType}} displayName: Validate (${{parameters.environmentType}} Environment) jobs: - job: ValidateBicepCode displayName: Validate Bicep code variables: - group: ToyWebsite${{parameters.environmentType}} steps:
ValidateBicepCode
Aktualizujte úlohu tak, aby automaticky odvodil název připojení služby na základě hodnoty parametruenvironmentType
:- ${{ if ne(parameters.environmentType, 'Production') }}: - stage: Validate_${{parameters.environmentType}} displayName: Validate (${{parameters.environmentType}} Environment) jobs: - job: ValidateBicepCode displayName: Validate Bicep code variables: - group: ToyWebsite${{parameters.environmentType}} steps: - task: AzureResourceManagerTemplateDeployment@3 name: RunPreflightValidation displayName: Run preflight validation inputs: connectedServiceName: ToyWebsite${{parameters.environmentType}} location: ${{parameters.deploymentDefaultLocation}} deploymentMode: Validation resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType)
ValidateBicepCode
Aktualizujte úlohu tak, aby používala importovanou skupinu proměnných k nastavení argumentů názvu skupiny prostředků a typu prostředí pro úlohu nasazení:- ${{ if ne(parameters.environmentType, 'Production') }}: - stage: Validate_${{parameters.environmentType}} displayName: Validate (${{parameters.environmentType}} Environment) jobs: - job: ValidateBicepCode displayName: Validate Bicep code variables: - group: ToyWebsite${{parameters.environmentType}} steps: - task: AzureResourceManagerTemplateDeployment@3 name: RunPreflightValidation displayName: Run preflight validation inputs: connectedServiceName: ToyWebsite${{parameters.environmentType}} location: ${{parameters.deploymentDefaultLocation}} deploymentMode: Validation resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType)
Proveďte změny úlohy
PreviewAzureChanges
:- ${{ if eq(parameters.environmentType, 'Production') }}: - stage: Preview_${{parameters.environmentType}} displayName: Preview (${{parameters.environmentType}} Environment) jobs: - job: PreviewAzureChanges displayName: Preview Azure changes variables: - group: ToyWebsite${{parameters.environmentType}} steps: - task: AzureCLI@2 name: RunWhatIf displayName: Run what-if inputs: azureSubscription: ToyWebsite${{parameters.environmentType}} scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az deployment group what-if \ --resource-group $(ResourceGroupName) \ --template-file deploy/main.bicep \ --parameters environmentType=$(EnvironmentType)
Proveďte stejné změny
Deploy
úlohy nasazení:- stage: Deploy_${{parameters.environmentType}} displayName: Deploy (${{parameters.environmentType}} Environment) jobs: - deployment: DeployWebsite displayName: Deploy website variables: - group: ToyWebsite${{parameters.environmentType}} environment: ${{parameters.environmentType}} strategy: runOnce: deploy: steps: - checkout: self - task: AzureResourceManagerTemplateDeployment@3 name: DeployBicepFile displayName: Deploy Bicep file inputs: connectedServiceName: ToyWebsite${{parameters.environmentType}} deploymentName: $(Build.BuildNumber) location: ${{parameters.deploymentDefaultLocation}} resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType) deploymentOutputs: deploymentOutputs
Ověřte, že váš soubor deploy.yml teď vypadá jako následující kód:
parameters: - name: environmentType type: string - name: deploymentDefaultLocation type: string default: westus3 stages: - ${{ if ne(parameters.environmentType, 'Production') }}: - stage: Validate_${{parameters.environmentType}} displayName: Validate (${{parameters.environmentType}} Environment) jobs: - job: ValidateBicepCode displayName: Validate Bicep code variables: - group: ToyWebsite${{parameters.environmentType}} steps: - task: AzureResourceManagerTemplateDeployment@3 name: RunPreflightValidation displayName: Run preflight validation inputs: connectedServiceName: ToyWebsite${{parameters.environmentType}} location: ${{parameters.deploymentDefaultLocation}} deploymentMode: Validation resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType) - ${{ if eq(parameters.environmentType, 'Production') }}: - stage: Preview_${{parameters.environmentType}} displayName: Preview (${{parameters.environmentType}} Environment) jobs: - job: PreviewAzureChanges displayName: Preview Azure changes variables: - group: ToyWebsite${{parameters.environmentType}} steps: - task: AzureCLI@2 name: RunWhatIf displayName: Run what-if inputs: azureSubscription: ToyWebsite${{parameters.environmentType}} scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az deployment group what-if \ --resource-group $(ResourceGroupName) \ --template-file deploy/main.bicep \ --parameters environmentType=$(EnvironmentType) - stage: Deploy_${{parameters.environmentType}} displayName: Deploy (${{parameters.environmentType}} Environment) jobs: - deployment: DeployWebsite displayName: Deploy website variables: - group: ToyWebsite${{parameters.environmentType}} environment: ${{parameters.environmentType}} strategy: runOnce: deploy: steps: - checkout: self - task: AzureResourceManagerTemplateDeployment@3 name: DeployBicepFile displayName: Deploy Bicep file inputs: connectedServiceName: ToyWebsite${{parameters.environmentType}} deploymentName: $(Build.BuildNumber) location: ${{parameters.deploymentDefaultLocation}} resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType) deploymentOutputs: deploymentOutputs - bash: | echo "##vso[task.setvariable variable=appServiceAppHostName;isOutput=true]$(echo $DEPLOYMENT_OUTPUTS | jq -r '.appServiceAppHostName.value')" name: SaveDeploymentOutputs displayName: Save deployment outputs into variables env: DEPLOYMENT_OUTPUTS: $(deploymentOutputs) - stage: SmokeTest_${{parameters.environmentType}} displayName: Smoke Test (${{parameters.environmentType}} Environment) jobs: - job: SmokeTest displayName: Smoke test variables: appServiceAppHostName: $[ stageDependencies.Deploy_${{parameters.environmentType}}.DeployWebsite.outputs['DeployWebsite.SaveDeploymentOutputs.appServiceAppHostName'] ] steps: - task: PowerShell@2 name: RunSmokeTests displayName: Run smoke tests inputs: targetType: inline script: | $container = New-PesterContainer ` -Path 'deploy/Website.Tests.ps1' ` -Data @{ HostName = '$(appServiceAppHostName)' } Invoke-Pester ` -Container $container ` -CI - task: PublishTestResults@2 name: PublishTestResults displayName: Publish test results condition: always() inputs: testResultsFormat: NUnit testResultsFiles: 'testResults.xml'
Uložte změny souboru.
Aktualizace definice kanálu pro zjednodušení seznamu parametrů
Otevřete soubor azure-pipelines.yml.
Aktualizujte fáze, které používají šablony k odebrání
resourceGroupName
aserviceConnectionName
parametrů. Ponechte pouzeenvironmentType
parametr.trigger: batch: true branches: include: - main pool: vmImage: ubuntu-latest stages: # Lint the Bicep file. - stage: Lint jobs: - template: pipeline-templates/lint.yml # Deploy to the test environment. - template: pipeline-templates/deploy.yml parameters: environmentType: Test # Deploy to the production environment. - template: pipeline-templates/deploy.yml parameters: environmentType: Production
Uložte změny souboru.
Potvrďte změny do úložiště Git bez jejich nasdílením pomocí následujících příkazů:
git add . git commit -m "Use variable groups"
Aktualizace souboru Bicep
Otevřete soubor main.bicep.
Pod parametry, které jsou již v souboru, přidejte následující parametry pro nové revizní rozhraní API:
@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
appServiceApp
Aktualizujte definici prostředku tak, aby poskytovala adresu URL a klíč rozhraní API pro kontrolu aplikace, aby je kód vašeho webu mohl používat: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 } ] } } }
Uložte změny souboru.
Aktualizace skupin proměnných
V prohlížeči přejděte do knihovny Pipelines>a otevřete skupiny proměnných ToyWebsiteTest.
Přidejte následující proměnné:
Jméno Hodnota ReviewApiKey sandboxsecretkey ReviewApiUrl https://sandbox.contoso.com/reviews
Vyberte ikonu visacího zámku vedle proměnné ReviewApiKey . Tento krok řekne službě Azure Pipelines, aby s hodnotou proměnné zacházeli bezpečně.
Uložte skupinu proměnných.
Aktualizujte skupinu proměnných ToyWebsiteProduction a přidejte podobnou sadu proměnných:
Jméno Hodnota ReviewApiKey productionsecretkey ReviewApiUrl https://api.contoso.com/reviews
Nezapomeňte vybrat ikonu visacího zámku vedle proměnné ReviewApiKey .
Uložte skupinu proměnných.
Přidání kontrolních proměnných rozhraní API do skupin proměnných
V editoru Visual Studio Code otevřete soubor deploy.yml .
V úloze
ValidateBicepCode
přidejte do úlohy nasazení hodnoty parametrů revizí rozhraní API:- ${{ if ne(parameters.environmentType, 'Production') }}: - stage: Validate_${{parameters.environmentType}} displayName: Validate (${{parameters.environmentType}} Environment) jobs: - job: ValidateBicepCode displayName: Validate Bicep code variables: - group: ToyWebsite${{parameters.environmentType}} steps: - task: AzureResourceManagerTemplateDeployment@3 name: RunPreflightValidation displayName: Run preflight validation inputs: connectedServiceName: ToyWebsite${{parameters.environmentType}} location: ${{parameters.deploymentDefaultLocation}} deploymentMode: Validation resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType) -reviewApiUrl $(ReviewApiUrl) -reviewApiKey $(ReviewApiKey)
Proveďte stejnou změnu úlohy
PreviewAzureChanges
:- ${{ if eq(parameters.environmentType, 'Production') }}: - stage: Preview_${{parameters.environmentType}} displayName: Preview (${{parameters.environmentType}} Environment) jobs: - job: PreviewAzureChanges displayName: Preview Azure changes variables: - group: ToyWebsite${{parameters.environmentType}} steps: - task: AzureCLI@2 name: RunWhatIf displayName: Run what-if inputs: azureSubscription: ToyWebsite${{parameters.environmentType}} scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az deployment group what-if \ --resource-group $(ResourceGroupName) \ --template-file deploy/main.bicep \ --parameters environmentType=$(EnvironmentType) \ reviewApiUrl=$(ReviewApiUrl) \ reviewApiKey=$(ReviewApiKey)
Důležité
Nezapomeňte přidat zpětné lomítko (
\
) na konec řádku, který nastaví hodnotu parametruenvironmentType
, a na další řádek. Znak\
označuje, že další řádky jsou součástí stejného příkazu Azure CLI.Proveďte stejnou změnu úlohy
Deploy
:- stage: Deploy_${{parameters.environmentType}} displayName: Deploy (${{parameters.environmentType}} Environment) jobs: - deployment: DeployWebsite displayName: Deploy website variables: - group: ToyWebsite${{parameters.environmentType}} environment: ${{parameters.environmentType}} strategy: runOnce: deploy: steps: - checkout: self - task: AzureResourceManagerTemplateDeployment@3 name: DeployBicepFile displayName: Deploy Bicep file inputs: connectedServiceName: ToyWebsite${{parameters.environmentType}} deploymentName: $(Build.BuildNumber) location: ${{parameters.deploymentDefaultLocation}} resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType) -reviewApiUrl $(ReviewApiUrl) -reviewApiKey $(ReviewApiKey) deploymentOutputs: deploymentOutputs
Ověřte, že váš soubor deploy.yml teď vypadá jako následující kód:
parameters: - name: environmentType type: string - name: deploymentDefaultLocation type: string default: westus3 stages: - ${{ if ne(parameters.environmentType, 'Production') }}: - stage: Validate_${{parameters.environmentType}} displayName: Validate (${{parameters.environmentType}} Environment) jobs: - job: ValidateBicepCode displayName: Validate Bicep code variables: - group: ToyWebsite${{parameters.environmentType}} steps: - task: AzureResourceManagerTemplateDeployment@3 name: RunPreflightValidation displayName: Run preflight validation inputs: connectedServiceName: ToyWebsite${{parameters.environmentType}} location: ${{parameters.deploymentDefaultLocation}} deploymentMode: Validation resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType) -reviewApiUrl $(ReviewApiUrl) -reviewApiKey $(ReviewApiKey) - ${{ if eq(parameters.environmentType, 'Production') }}: - stage: Preview_${{parameters.environmentType}} displayName: Preview (${{parameters.environmentType}} Environment) jobs: - job: PreviewAzureChanges displayName: Preview Azure changes variables: - group: ToyWebsite${{parameters.environmentType}} steps: - task: AzureCLI@2 name: RunWhatIf displayName: Run what-if inputs: azureSubscription: ToyWebsite${{parameters.environmentType}} scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az deployment group what-if \ --resource-group $(ResourceGroupName) \ --template-file deploy/main.bicep \ --parameters environmentType=$(EnvironmentType) \ reviewApiUrl=$(ReviewApiUrl) \ reviewApiKey=$(ReviewApiKey) - stage: Deploy_${{parameters.environmentType}} displayName: Deploy (${{parameters.environmentType}} Environment) jobs: - deployment: DeployWebsite displayName: Deploy website variables: - group: ToyWebsite${{parameters.environmentType}} environment: ${{parameters.environmentType}} strategy: runOnce: deploy: steps: - checkout: self - task: AzureResourceManagerTemplateDeployment@3 name: DeployBicepFile displayName: Deploy Bicep file inputs: connectedServiceName: ToyWebsite${{parameters.environmentType}} deploymentName: $(Build.BuildNumber) location: ${{parameters.deploymentDefaultLocation}} resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType) -reviewApiUrl $(ReviewApiUrl) -reviewApiKey $(ReviewApiKey) deploymentOutputs: deploymentOutputs - bash: | echo "##vso[task.setvariable variable=appServiceAppHostName;isOutput=true]$(echo $DEPLOYMENT_OUTPUTS | jq -r '.appServiceAppHostName.value')" name: SaveDeploymentOutputs displayName: Save deployment outputs into variables env: DEPLOYMENT_OUTPUTS: $(deploymentOutputs) - stage: SmokeTest_${{parameters.environmentType}} displayName: Smoke Test (${{parameters.environmentType}} Environment) jobs: - job: SmokeTest displayName: Smoke test variables: appServiceAppHostName: $[ stageDependencies.Deploy_${{parameters.environmentType}}.DeployWebsite.outputs['DeployWebsite.SaveDeploymentOutputs.appServiceAppHostName'] ] steps: - task: PowerShell@2 name: RunSmokeTests displayName: Run smoke tests inputs: targetType: inline script: | $container = New-PesterContainer ` -Path 'deploy/Website.Tests.ps1' ` -Data @{ HostName = '$(appServiceAppHostName)' } Invoke-Pester ` -Container $container ` -CI - task: PublishTestResults@2 name: PublishTestResults displayName: Publish test results condition: always() inputs: testResultsFormat: NUnit testResultsFiles: 'testResults.xml'
Potvrďte a nasdílejte změny do úložiště Git pomocí následujících příkazů:
git add . git commit -m "Add new review API settings to Bicep file and pipeline" git push
Kontrola výsledků nasazení
V prohlížeči přejděte na Pipelines.
Vyberte poslední spuštění kanálu.
Počkejte, než se kanál pozastaví před fází Nasazení (produkční prostředí). Než se kanál dostane k tomuto bodu, může to trvat několik minut.
Pokud se zobrazí výzva k udělení oprávnění pro přístup k prostředku, vyberte Zobrazit a pak vyberte Povolit.
Schválení nasazení do produkčního prostředí výběrem Možnosti Zkontrolovat schválení>
Počkejte, až se kanál dokončí.
Vyberte prostředí Kanálů>.
Vyberte produkční prostředí.
Všimněte si, že v historii prostředí se teď zobrazuje více nasazení.
V prohlížeči přejděte na web Azure Portal.
Přejděte do skupiny prostředků ToyWebsiteProduction .
V seznamu prostředků otevřete aplikaci Aplikace Azure Service.
Vyberte Konfigurace.
Vyberte Zobrazit hodnoty.
Všimněte si, že hodnoty produkční lokality pro nastavení ReviewApiKey a ReviewApiUrl jsou nastaveny na hodnoty, které jste nakonfigurovali ve skupině produkčních proměnných.
Porovnejte aktuální hodnoty s nastavením konfigurace pro aplikaci App Service ve skupině prostředků ToyWebsiteTest . Všimněte si, že se hodnoty liší.
Vyčištění prostředků
Teď, když jste cvičení dokončili, můžete odebrat prostředky, abyste za ně neúčtoli.
V terminálu editoru Visual Studio Code spusťte následující příkazy:
az group delete --resource-group ToyWebsiteTest --yes --no-wait
az group delete --resource-group ToyWebsiteProduction --yes --no-wait
Skupina prostředků se odstraní na pozadí.
Remove-AzResourceGroup -Name ToyWebsiteTest -Force
Remove-AzResourceGroup -Name ToyWebsiteProduction -Force