Resource Manager-sjablonen integreren met Azure-pijplijnen

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

Selecteer uw optie

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

  • Arm-sjabloonimplementatietaak gebruiken. Deze optie is de eenvoudigste optie. Deze aanpak werkt wanneer u een sjabloon rechtstreeks vanuit een opslagplaats wilt implementeren. Deze optie wordt niet behandeld in dit artikel, 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 uw GitHub-opslagplaats.

  • Voeg een taak toe waarmee een Azure PowerShell script wordt uitgevoerd. Deze optie heeft het voordeel dat consistentie wordt geboden tijdens de levenscyclus van de ontwikkeling, 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 ophalen van waarden die moeten worden gebruikt als parameters. Deze optie wordt in dit artikel weergegeven. Zie Azure PowerShell taak.

    Visual Studio biedt het Azure-resourcegroepproject met een PowerShell-script. Met het script worden artefacten van uw project gefaseerd naar een opslagaccount waartoe Resource Manager toegang hebt. Artefacten zijn items in uw project, zoals gekoppelde sjablonen, scripts en binaire toepassingsbestanden. 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. Eén taak faseert de artefacten naar een toegankelijke locatie. Met de andere taak wordt de sjabloon vanaf die locatie geïmplementeerd. Deze optie wordt in dit artikel weergegeven. Zie Taken kopiëren en implementeren.

Uw project voorbereiden

In dit artikel wordt ervan uitgegaan dat uw ARM-sjabloon en Azure DevOps-organisatie gereed zijn voor het maken van de pijplijn. De volgende stappen laten zien 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, controleert u of 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-project maken voor de stappen voor het maken van de verbinding.

  • U hebt een ARM-sjabloon waarmee de infrastructuur voor uw project wordt gedefinieerd.

Pijplijn maken

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

    Schermopname van de knop Nieuwe pijplijn toevoegen

  2. Geef op waar uw code wordt opgeslagen. In de volgende afbeelding ziet u het selecteren van Azure-opslagplaatsen Git.

    Schermopname van het selecteren van de codebron in Azure DevOps

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

    Schermopname van het selecteren van de opslagplaats voor het project in Azure DevOps

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

    Schermopname van het selecteren van het type pijplijn dat u wilt maken in Azure DevOps

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

Azure PowerShell-taak

In deze sectie wordt beschreven hoe u continue implementatie configureert met behulp van één taak waarmee het PowerShell-script in uw project wordt uitgevoerd. Als u een PowerShell-script nodig hebt waarmee een sjabloon wordt geïmplementeerd, raadpleegt uDeploy-AzTemplate.ps1 of Deploy-AzureResourceGroup.ps1.

Met het volgende YAML-bestand wordt een Azure PowerShell taak 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 instelt 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 voor azureSubscriptionde naam op van de serviceverbinding die u hebt gemaakt.

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

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

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

Geef in ScriptArgumentsalle 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 naar de samenvatting voor uw build-pijplijn en watch de status.

Schermopname van de pijplijnresultatenweergave in Azure DevOps

U kunt de pijplijn selecteren die momenteel wordt uitgevoerd om details over de taken te bekijken. Wanneer het is voltooid, ziet u de resultaten voor elke stap.

Taken kopiëren en implementeren

In deze sectie wordt beschreven hoe u continue implementatie configureert met behulp van twee taken. Met de eerste taak worden de artefacten naar een opslagaccount gefaseerd en met de tweede taak wordt de sjabloon geïmplementeerd.

Als u bestanden naar een opslagaccount wilt kopiëren, moet aan de service-principal voor de serviceverbinding de rol Bijdrager voor opslagblobgegevens of eigenaar van opslagblobgegevens zijn toegewezen. Zie Aan de slag met AzCopy voor meer informatie.

In de volgende YAML ziet u 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 moeten worden herzien voor uw omgeving. De SourcePath geeft de locatie van de artefacten ten opzichte van het pijplijnbestand aan.

SourcePath: '<path-to-artifacts>'

Geef voor azureSubscriptionde 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 toevoegen om de gefaseerde sjabloon te implementeren.

In de volgende YAML ziet u de implementatietaak van de Azure Resource Manager-sjabloon:

- 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 uitgebreider moeten worden bekeken.

  • deploymentScope: Selecteer het implementatiebereik uit de opties: Management Group, Subscriptionen 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 id van het doelabonnement 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 waarnaar u wilt implementeren. De taak maakt de resourcegroep als deze niet bestaat.

    resourceGroupName: '<resource-group-name>'
    location: '<location>'
    
  • csmFileLink: geef de koppeling voor de gefaseerde sjabloon op. Gebruik bij het instellen van de waarde variabelen die zijn geretourneerd door de bestandskopietaak. Het volgende voorbeeld is gekoppeld aan een sjabloon met de naam mainTemplate.json. De map met de naam templates is opgenomen omdat de bestandskopietaak het bestand naartoe heeft gekopieerd. Geef in de pijplijn het pad naar de sjabloon en de naam van de sjabloon op.

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

Uw pijplijn ziet er als volgt 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. Selecteer onder het frame Takende optie Taak om de taakstatus weer te geven.

Volgende stappen