Oefening: Bicep-parameters gebruiken met meerdere omgevingen
Nu uw pijplijn in beide omgevingen wordt geïmplementeerd, bent u klaar om te integreren met de API van derden voor productbeoordelingen.
Uw websiteteam heeft u de API-sleutels en URL's verstrekt die uw website moet gebruiken voor toegang tot de service. Er zijn verschillende waarden voor uw test- en productieomgevingen die u kunt gebruiken. In deze les werkt u uw pijplijn bij om elk van uw omgevingen te configureren met de juiste instellingen voor de productbeoordelings-API.
Tijdens het proces gaat u het volgende doen:
- Maak variabelegroepen voor elk van uw omgevingen.
- Werk de pijplijn bij zodat de juiste variabelegroep voor elke omgeving wordt gekozen in plaats van sjabloonparameters te gebruiken.
- Werk uw Bicep-bestand bij om de instellingen door te geven die u nodig hebt voor de API voor productbeoordeling.
- Werk de variabelegroep en pijplijn bij om de waarden voor de instellingen van de productbeoordelings-API in te stellen.
- Bekijk de resultaten van de pijplijn en de wijzigingen in uw Azure-omgeving.
Variabelegroepen toevoegen
Omdat u meer parameters toevoegt die per omgeving verschillen, besluit u om uw pijplijnparameters niet rechtstreeks toe te voegen aan uw YAML-pijplijnbestanden. In plaats daarvan gebruikt u een variabelegroep om de waarden voor elke omgeving bij elkaar te houden.
Ga in uw browser naar de pijplijnbibliotheek>.
Selecteer de knop + Variabele.
Voer ToyWebsiteTest in als de naam van de variabelegroep.
Selecteer de knop + Toevoegen om variabelen toe te voegen aan de variabelegroep. Maak twee variabelen met de volgende instellingen:
Naam Weergegeven als EnvironmentType Testen ResourceGroupName ToyWebsiteTest U ziet dat u de naam van de serviceverbinding niet definieert in de variabelegroep. Serviceverbindingsnamen hebben speciale regels over hoe ze kunnen worden opgegeven. In deze module gebruikt u parameters voor pijplijnsjablonen.
Selecteer Opslaan.
Selecteer de knop Vorige in uw browser om terug te keren naar de lijst met variabele groepen.
Voeg een andere variabelegroep toe met de naam ToyWebsiteProduction. Maak twee variabelen met de volgende instellingen:
Naam Weergegeven als EnvironmentType Productie ResourceGroupName ToyWebsiteProduction U ziet dat de namen van variabelen hetzelfde zijn voor beide omgevingen, maar de waarden verschillen.
Sla de productievariabelegroep op.
De implementatiepijplijnsjabloon bijwerken om de variabelegroep te gebruiken
Open in Visual Studio Code het bestand deploy.yml .
Verwijder
resourceGroupName
de enserviceConnectionName
parameters boven aan het bestand. Verwijder deenvironmentType
ofdeploymentDefaultLocation
parameters niet.parameters: - name: environmentType type: string - name: deploymentDefaultLocation type: string default: westus3
Werk de
ValidateBicepCode
taak bij om de variabelegroep te importeren:- ${{ 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:
Werk de
ValidateBicepCode
taak bij zodat de serviceverbindingsnaam automatisch wordt afgeleid op basis van deenvironmentType
parameterwaarde:- ${{ 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)
Werk de
ValidateBicepCode
taak bij om de geïmporteerde variabelegroep te gebruiken om de naam van de resourcegroep en de argumenten voor het omgevingstype voor de implementatietaak in te stellen:- ${{ 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)
Breng de wijzigingen aan in de
PreviewAzureChanges
taak:- ${{ 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)
Breng dezelfde wijzigingen aan in de
Deploy
implementatietaak:- 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
Controleer of uw deploy.yml-bestand er nu uitziet als de volgende code:
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'
Sla de wijzigingen in het bestand op.
De pijplijndefinitie bijwerken om de lijst met parameters te vereenvoudigen
Open bestand azure-pipelines.yml.
Werk de fasen bij die gebruikmaken van sjablonen om de
resourceGroupName
enserviceConnectionName
parameters te verwijderen. Laat alleen deenvironmentType
parameter staan.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
Sla de wijzigingen in het bestand op.
Voer uw wijzigingen door in uw Git-opslagplaats zonder ze te pushen met behulp van de volgende opdrachten:
git add . git commit -m "Use variable groups"
Het Bicep-bestand bijwerken
Open het bestand main.bicep .
Voeg onder de parameters die zich al in het bestand bevinden de volgende parameters toe voor de nieuwe beoordelings-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
Werk de
appServiceApp
resourcedefinitie bij om de URL en sleutel van de beoordelings-API voor de toepassing op te geven, zodat de code van uw website deze kan gebruiken: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 } ] } } }
Sla de wijzigingen in het bestand op.
De variabelegroepen bijwerken
Ga in uw browser naar Pipelines>Library en open de variabelengroepen ToyWebsiteTest.
Voeg de volgende variabelen toe:
Naam Weergegeven als ReviewApiKey sandboxsecretkey ReviewApiUrl https://sandbox.contoso.com/reviews
Selecteer het hangslotpictogram naast de variabele ReviewApiKey . Deze stap vertelt Azure Pipelines om de waarde van de variabele veilig te behandelen.
Sla de variabelegroep op.
Werk de variabelegroep ToyWebsiteProduction bij om een vergelijkbare set variabelen toe te voegen:
Naam Weergegeven als ReviewApiKey productionsecretkey ReviewApiUrl https://api.contoso.com/reviews
Vergeet niet om het hangslotpictogram naast de variabele ReviewApiKey te selecteren.
Sla de variabelegroep op.
De API-variabelen controleren toevoegen aan de variabelegroepen
Open in Visual Studio Code het bestand deploy.yml .
Voeg in de
ValidateBicepCode
taak de waarden van de API-parameter controleren toe aan de implementatietaak:- ${{ 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)
Breng dezelfde wijziging aan in de
PreviewAzureChanges
taak:- ${{ 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)
Belangrijk
Zorg ervoor dat u de backslash (
\
) aan het einde van de regel toevoegt waarmee deenvironmentType
parameterwaarde wordt ingesteld en op de volgende regel. Het\
teken geeft aan dat verdere regels deel uitmaken van dezelfde Azure CLI-opdracht.Breng dezelfde wijziging aan in de
Deploy
taak:- 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
Controleer of uw deploy.yml-bestand er nu uitziet als de volgende code:
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'
Voer uw wijzigingen door en push deze naar uw Git-opslagplaats met behulp van de volgende opdrachten:
git add . git commit -m "Add new review API settings to Bicep file and pipeline" git push
De implementatieresultaten bekijken
Ga in uw browser naar Pijplijnen.
Selecteer de meest recente uitvoering van uw pijplijn.
Wacht tot de pijplijn is onderbroken voordat de fase Deploy (Production Environment) wordt uitgevoerd. Het kan enkele minuten duren voordat de pijplijn dit punt bereikt.
Als u wordt gevraagd om toegang te verlenen tot een resource, selecteert u Weergeven en selecteert u Toestaan.
Keur de implementatie goed in de productieomgeving door Goedkeuren> selecteren.
Wacht totdat de pijplijn is uitgevoerd.
Selecteer Pijplijnomgevingen>.
Selecteer de productieomgeving .
U ziet nu meerdere implementaties in de geschiedenis van de omgeving.
Ga in een browser naar de Azure-portal.
Ga naar de resourcegroep ToyWebsiteProduction .
Open de Azure-app Service-app in de lijst met resources.
Selecteer Configuratie.
Selecteer Waarden weergeven.
U ziet dat de waarden van de productiesite voor de instellingen ReviewApiKey en ReviewApiUrl zijn ingesteld op de waarden die u hebt geconfigureerd in de productievariabelegroep.
Vergelijk de huidige waarden met de configuratie-instellingen voor de App Service-app in de resourcegroep ToyWebsiteTest . U ziet dat de waarden verschillen.
De resources opschonen
Nu u de oefening hebt voltooid, kunt u de resources verwijderen zodat u er geen kosten voor in rekening worden gebracht.
Voer in de Visual Studio Code-terminal de volgende opdrachten uit:
az group delete --resource-group ToyWebsiteTest --yes --no-wait
az group delete --resource-group ToyWebsiteProduction --yes --no-wait
De resourcegroep wordt op de achtergrond verwijderd.
Remove-AzResourceGroup -Name ToyWebsiteTest -Force
Remove-AzResourceGroup -Name ToyWebsiteProduction -Force