Resource Manager-sjablonen integreren met Azure-pijplijnen

U kunt uw Azure Resource Manager (ARM-sjablonen) integreren met Azure Pipelines voor continue integratie en continue implementatie (CI/CD). In dit artikel leert u twee meer geavanceerde manieren om sjablonen te implementeren met Azure Pipelines.

Selecteer uw optie

Voordat u verdergaat met dit artikel, kijken we naar de verschillende opties voor het implementeren van een ARM-sjabloon vanuit een pijplijn.

  • Gebruik arm-sjabloonimplementatietaak. Deze optie is de eenvoudigste optie. Deze aanpak werkt wanneer u een sjabloon rechtstreeks vanuit een opslagplaats wilt implementeren. Deze optie wordt niet in dit artikel behandeld, maar wordt in plaats daarvan behandeld in de zelfstudie Continue integratie van ARM-sjablonen met Azure Pipelines. U ziet hoe u de implementatietaak van de ARM-sjabloon gebruikt om een sjabloon te implementeren vanuit GitHub-repo.

  • Voeg een taak toe die een Azure PowerShell script wordt uitgevoerd. Deze optie heeft het voordeel consistentie te bieden gedurende de ontwikkelingslevenscyclus, omdat u hetzelfde script kunt gebruiken dat u hebt gebruikt bij het uitvoeren van lokale tests. Het script implementeert de sjabloon, maar kan ook andere bewerkingen uitvoeren, zoals het verkrijgen van waarden die als parameters moeten worden gebruikt. Deze optie wordt weergegeven in dit artikel. Zie Azure PowerShell taak.

    Visual Studio biedt het Azure-resourcegroepproject met een PowerShell-script. Het script faseer artefacten van uw project naar een opslagaccount Resource Manager toegang heeft. Artefacten zijn items in uw project, zoals gekoppelde sjablonen, scripts en binaire bestanden voor toepassingen. Als u het script uit het project wilt blijven gebruiken, gebruikt u de PowerShell-scripttaak die in dit artikel wordt weergegeven.

  • Voeg taken toe om taken te kopiëren en te implementeren. Deze optie biedt een handig alternatief voor het projectscript. U configureert twee taken in de pijplijn. De ene taak faseeert de artefacten naar een toegankelijke locatie. De andere taak implementeert de sjabloon vanaf die locatie. Deze optie wordt weergegeven in dit artikel. Zie Taken kopiëren en implementeren.

Uw project voorbereiden

In dit artikel wordt ervan uitgenomen dat uw ARM-sjabloon en Azure DevOps-organisatie klaar zijn voor het maken van de pijplijn. In de volgende stappen ziet u hoe u ervoor kunt zorgen dat u klaar bent:

  • U hebt een Azure DevOps-organisatie. Als u dit niet hebt, kunt u er gratis een maken. Als uw team al een Azure DevOps-organisatie heeft, moet u ervoor zorgen dat u een beheerder bent van het Azure DevOps-project dat u wilt gebruiken.

  • U hebt een serviceverbinding met uw Azure-abonnement geconfigureerd. De taken in de pijplijn worden uitgevoerd onder de identiteit van de service-principal. Zie Een DevOps-projectmaken voor de stappen voor het maken van de verbinding.

  • U hebt een ARM-sjabloon die de infrastructuur voor uw project definieert.

Pijplijn maken

  1. Als u nog geen pijplijn hebt toegevoegd, moet u een nieuwe pijplijn maken. Vanuit uw Azure DevOps-organisatie selecteert u Pijplijnen en Nieuwe pijplijn.

    Nieuwe pijplijn toevoegen

  2. Geef op waar uw code wordt opgeslagen. In de volgende afbeelding ziet u hoe u Azure Repos Git selecteert.

    Codebron selecteren

  3. Selecteer vanuit die bron de opslagplaats met de code voor uw project.

    Opslagplaats selecteren

  4. Selecteer het type pijplijn dat u wilt maken. U kunt Starter-pijplijn selecteren.

    Pijplijn selecteren

U bent er klaar voor om een nieuwe Azure PowerShell of het kopieerbestand toe te voegen en taken te implementeren.

Azure PowerShell-taak

In deze sectie ziet u hoe u continue implementatie configureert met behulp van één taak die het PowerShell-script in uw project wordt uitgevoerd. Als u een PowerShell-script nodig hebt om een sjabloon te implementeren, zieDeploy-AzTemplate.ps1 of Deploy-AzureResourceGroup.ps1.

Met het volgende YAML-bestand wordt een Azure PowerShell gemaakt:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzurePowerShell@5
  inputs:
    azureSubscription: 'script-connection'
    ScriptType: 'FilePath'
    ScriptPath: './Deploy-AzTemplate.ps1'
    ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json
    azurePowerShellVersion: 'LatestVersion'

Wanneer u de taak in stelt op AzurePowerShell@5 , gebruikt de pijplijn de Az-module. Als u de AzureRM-module in uw script gebruikt, stelt u de taak in op AzurePowerShell@3 .

steps:
- task: AzurePowerShell@3

Geef azureSubscription voor de naam op van de serviceverbinding die u hebt gemaakt.

inputs:
    azureSubscription: '<your-connection-name>'

Geef scriptPath voor het relatieve pad van het pijplijnbestand naar uw script op. U kunt in uw opslagplaats zoeken om het pad te zien.

ScriptPath: '<your-relative-path>/<script-file-name>.ps1'

Geef ScriptArguments in de parameters op die nodig zijn voor uw script. In het volgende voorbeeld ziet u enkele parameters voor een script, maar u moet de parameters voor uw script aanpassen.

ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json

Wanneer u Opslaan selecteert, wordt de build-pijplijn automatisch uitgevoerd. Terug de samenvatting voor uw build-pijplijn en bekijk de status.

Resultaten weergeven

U kunt de pijplijn selecteren die momenteel wordt uitgevoerd voor meer informatie over de taken. Wanneer deze is klaar, ziet u de resultaten voor elke stap.

Taken kopiëren en implementeren

In deze sectie ziet u hoe u continue implementatie configureert met behulp van twee taken. De eerste taak faseeert de artefacten naar een opslagaccount en de tweede taak implementeert de sjabloon.

Als u bestanden wilt kopiëren naar een opslagaccount, moet aan de service-principal voor de serviceverbinding de rol Storage Blob Data Contributor of Storage Blob Data Owner zijn toegewezen. Zie Aan de slag met AzCopy voor meer informatie.

De volgende YAML toont de Azure-bestandskopietaak.

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: AzureFileCopy@4
  inputs:
    SourcePath: 'templates'
    azureSubscription: 'copy-connection'
    Destination: 'AzureBlob'
    storage: 'demostorage'
    ContainerName: 'projecttemplates'
  name: AzureFileCopy

Er zijn verschillende onderdelen van deze taak die u moet herzien voor uw omgeving. De SourcePath geeft de locatie aan van de artefacten ten opzichte van het pijplijnbestand.

SourcePath: '<path-to-artifacts>'

Geef azureSubscription voor de naam op van de serviceverbinding die u hebt gemaakt.

azureSubscription: '<your-connection-name>'

Geef voor opslag- en containernaam de namen op van het opslagaccount en de container die u wilt gebruiken voor het opslaan van de artefacten. Het opslagaccount moet bestaan.

storage: '<your-storage-account-name>'
ContainerName: '<container-name>'

Nadat u de kopieerbestandstaak hebt gemaakt, kunt u de taak voor het implementeren van de gefaseerd sjabloon toevoegen.

In de volgende YAML ziet u de Azure Resource Manager sjabloonimplementatietaak:

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'copy-connection'
    subscriptionId: '00000000-0000-0000-0000-000000000000'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'demogroup'
    location: 'West US'
    templateLocation: 'URL of the file'
    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
    deploymentMode: 'Incremental'
    deploymentName: 'deploy1'

Er zijn verschillende onderdelen van deze taak die in meer detail moeten worden beoordeeld.

  • deploymentScope: Selecteer het bereik van de implementatie uit de opties: Management Group Subscription , en Resource Group . Zie Implementatiebereiken voor meer informatie over de bereiken.

  • azureResourceManagerConnection: Geef de naam op van de serviceverbinding die u hebt gemaakt.

  • subscriptionId: Geef de doelabonnements-id op. Deze eigenschap is alleen van toepassing op het implementatiebereik van de resourcegroep en het implementatiebereik van het abonnement.

  • resourceGroupName en location : geef de naam en locatie op van de resourcegroep die u wilt implementeren. De taak maakt de resourcegroep als deze nog niet bestaat.

    resourceGroupName: '<resource-group-name>'
    location: '<location>'
    
  • csmFileLink: Geef de koppeling op voor de gefaseerd sjabloon. Bij het instellen van de waarde gebruikt u variabelen die worden geretourneerd door de bestandskopieertaak. In het volgende voorbeeld wordt een koppeling gemaakt naar een sjabloon mainTemplate.jsnaam aan. De map met de naam sjablonen is opgenomen omdat de bestandskopietaak het bestand naar heeft gekopieerd. Geef in uw pijplijn het pad naar uw sjabloon en de naam van uw sjabloon op.

    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    

Uw pijplijn ziet er als volgende uit:

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: AzureFileCopy@4
  inputs:
    SourcePath: 'templates'
    azureSubscription: 'copy-connection'
    Destination: 'AzureBlob'
    storage: 'demostorage'
    ContainerName: 'projecttemplates'
  name: AzureFileCopy
- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'copy-connection'
    subscriptionId: '00000000-0000-0000-0000-000000000000'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'demogroup'
    location: 'West US'
    templateLocation: 'URL of the file'
    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
    deploymentMode: 'Incremental'
    deploymentName: 'deploy1'

Wanneer u Opslaan selecteert, wordt de build-pijplijn automatisch uitgevoerd. Terug de samenvatting voor uw build-pijplijn en bekijk de status.

Volgende stappen