Integrera ARM-mallar med Azure Pipelines

Du kan integrera Azure Resource Manager-mallar (ARM-mallar) med Azure Pipelines för kontinuerlig integrering och kontinuerlig distribution (CI/CD). I den här artikeln får du lära dig två mer avancerade sätt att distribuera mallar med Azure Pipelines.

Välj ditt alternativ

Innan vi fortsätter med den här artikeln ska vi överväga de olika alternativen för att distribuera en ARM-mall från en pipeline.

  • Använd ARM-malldistributionsuppgiften. Det här alternativet är det enklaste alternativet. Den här metoden fungerar när du vill distribuera en mall direkt från en lagringsplats. Det här alternativet beskrivs inte i den här artikeln utan beskrivs i självstudien Kontinuerlig integrering av ARM-mallar med Azure Pipelines. Den visar hur du använder ARM-malldistributionsuppgiften för att distribuera en mall från din GitHub-lagringsplats.

  • Lägg till en uppgift som kör ett Azure PowerShell skript. Det här alternativet har fördelen att ge konsekvens under hela utvecklingslivscykeln eftersom du kan använda samma skript som du använde när du körde lokala tester. Skriptet distribuerar mallen men kan även utföra andra åtgärder, till exempel att hämta värden som ska användas som parametrar. Det här alternativet visas i den här artikeln. Se Azure PowerShell uppgift.

    Visual Studio tillhandahåller Azure Resource Group-projektet som innehåller ett PowerShell-skript. Skriptet fasar artefakter från projektet till ett lagringskonto som Resource Manager kan komma åt. Artefakter är objekt i projektet, till exempel länkade mallar, skript och binärfiler för program. Om du vill fortsätta använda skriptet från projektet använder du PowerShell-skriptuppgiften som visas i den här artikeln.

  • Lägg till uppgifter för att kopiera och distribuera uppgifter. Det här alternativet är ett praktiskt alternativ till projektskriptet. Du konfigurerar två uppgifter i pipelinen. En aktivitet gör artefakterna till en tillgänglig plats. Den andra uppgiften distribuerar mallen från den platsen. Det här alternativet visas i den här artikeln. Se Kopiera och distribuera uppgifter.

Förbereda projektet

Den här artikeln förutsätter att arm-mallen och Azure DevOps-organisationen är redo att skapa pipelinen. Följande steg visar hur du ser till att du är redo:

  • Du har en Azure DevOps-organisation. Om du inte har en kan du skapa en kostnadsfritt. Om ditt team redan har en Azure DevOps-organisation kontrollerar du att du är administratör för det Azure DevOps-projekt som du vill använda.

  • Du har konfigurerat en tjänstanslutning till din Azure-prenumeration. Uppgifterna i pipelinen körs under identiteten för tjänstens huvudnamn. Anvisningar för hur du skapar anslutningen finns i Skapa ett DevOps-projekt.

  • Du har en ARM-mall som definierar infrastrukturen för projektet.

Skapa pipeline

  1. Om du inte har lagt till en pipeline tidigare måste du skapa en ny pipeline. I Din Azure DevOps-organisation väljer du Pipelines och Ny pipeline.

    Skärmbild av knappen Lägg till ny pipeline

  2. Ange var koden lagras. Följande bild visar hur du väljer Azure Repos Git.

    Skärmbild av att välja kodkällan i Azure DevOps

  3. Från den källan väljer du den lagringsplats som har koden för projektet.

    Skärmbild av att välja lagringsplatsen för projektet i Azure DevOps

  4. Välj vilken typ av pipeline som ska skapas. Du kan välja Startpipeline.

    Skärmbild av att välja vilken typ av pipeline som ska skapas i Azure DevOps

Du är redo att antingen lägga till en Azure PowerShell uppgift eller kopiera filen och distribuera uppgifter.

Azure PowerShell-uppgift

Det här avsnittet visar hur du konfigurerar kontinuerlig distribution med hjälp av en enda uppgift som kör PowerShell-skriptet i projektet. Om du behöver ett PowerShell-skript som distribuerar en mall kan du läsaDeploy-AzTemplate.ps1 eller Deploy-AzureResourceGroup.ps1.

Följande YAML-fil skapar en Azure PowerShell uppgift:

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'

När du ställer in uppgiften på AzurePowerShell@5använder pipelinen Az-modulen. Om du använder AzureRM-modulen i skriptet anger du uppgiften till AzurePowerShell@3.

steps:
- task: AzurePowerShell@3

För azureSubscriptionanger du namnet på tjänstanslutningen som du skapade.

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

För scriptPathanger du den relativa sökvägen från pipelinefilen till skriptet. Du kan titta på din lagringsplats för att se sökvägen.

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

I ScriptArgumentsanger du alla parametrar som krävs av skriptet. I följande exempel visas några parametrar för ett skript, men du måste anpassa parametrarna för skriptet.

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

När du väljer Spara körs bygg-pipelinen automatiskt. Gå tillbaka till sammanfattningen för bygg-pipelinen och watch statusen.

Skärmbild av pipelineresultatvyn i Azure DevOps

Du kan välja den pipeline som körs för att se information om aktiviteterna. När det är klart visas resultatet för varje steg.

Kopiera och distribuera uppgifter

Det här avsnittet visar hur du konfigurerar kontinuerlig distribution med hjälp av två uppgifter. Den första aktiviteten mellanlagrar artefakterna till ett lagringskonto och den andra aktiviteten distribuerar mallen.

Om du vill kopiera filer till ett lagringskonto måste tjänstens huvudnamn för tjänstanslutningen tilldelas rollen Storage Blob Data-deltagare eller Lagringsblobdataägare. Mer information finns i Komma igång med AzCopy.

Följande YAML visar Azure-filkopieringsaktiviteten.

trigger:
- master

pool:
  vmImage: 'windows-latest'

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

Det finns flera delar av den här uppgiften att ändra för din miljö. SourcePath anger platsen för artefakterna i förhållande till pipelinefilen.

SourcePath: '<path-to-artifacts>'

För azureSubscriptionanger du namnet på tjänstanslutningen som du skapade.

azureSubscription: '<your-connection-name>'

För lagrings- och containernamn anger du namnen på lagringskontot och containern som du vill använda för att lagra artefakterna. Lagringskontot måste finnas.

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

När du har skapat kopieringsfilen är du redo att lägga till uppgiften för att distribuera den mellanlagrade mallen.

Följande YAML visar distributionsaktiviteten för Azure Resource Manager-mall:

- 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'

Det finns flera delar av den här uppgiften att granska mer detaljerat.

  • deploymentScope: Välj distributionsomfång från alternativen: Management Group, Subscriptionoch Resource Group. Mer information om omfången finns i Distributionsomfång.

  • azureResourceManagerConnection: Ange namnet på tjänstanslutningen som du skapade.

  • subscriptionId: Ange målprenumerations-ID. Den här egenskapen gäller endast för resursgruppsdistributionsomfånget och prenumerationsdistributionsomfånget.

  • resourceGroupName och location: ange namnet och platsen för den resursgrupp som du vill distribuera till. Uppgiften skapar resursgruppen om den inte finns.

    resourceGroupName: '<resource-group-name>'
    location: '<location>'
    
  • csmFileLink: Ange länken för den mellanlagrade mallen. När du anger värdet använder du variabler som returneras från filkopieringsaktiviteten. Följande exempel länkar till en mall med namnet mainTemplate.json. Mappen med namnet mallar ingår eftersom den där filkopieringsaktiviteten kopierade filen till. Ange sökvägen till mallen och namnet på mallen i pipelinen.

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

Din pipeline ser ut så här:

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'

När du väljer Spara körs bygg-pipelinen automatiskt. Under rutan Jobb väljer du Jobb för att se jobbstatusen.

Nästa steg