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 lär du 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 distributionsuppgiften för ARM-mallar. 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 stället 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 mellanlar 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
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.
Ange var koden lagras. Följande bild visar hur du väljer Azure Repos Git.
Från den källan väljer du den lagringsplats som har koden för projektet.
Välj vilken typ av pipeline som ska skapas. Du kan välja Startpipeline.
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äsa Deploy-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 anger uppgiften till AzurePowerShell@5
använder pipelinen Az-modulen. Om du använder AzureRM-modulen i skriptet anger du uppgiften till AzurePowerShell@3
.
steps:
- task: AzurePowerShell@3
För azureSubscription
anger du namnet på tjänstanslutningen som du skapade.
inputs:
azureSubscription: '<your-connection-name>'
För scriptPath
anger du den relativa sökvägen från pipelinefilen till skriptet. Du kan titta på lagringsplatsen för att se sökvägen.
ScriptPath: '<your-relative-path>/<script-file-name>.ps1'
I ScriptArguments
anger du de 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 titta på statusen.
Du kan välja den pipeline som körs för att se information om aktiviteterna. När den är klar 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 fasar artefakterna till ett lagringskonto och den andra uppgiften 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 azureSubscription
anger 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 distributionsuppgiften för Azure Resource Manager-mallen:
- task: AzureResourceManagerTemplateDeployment@3
inputs:
deploymentScope: 'Resource Group'
azureResourceManagerConnection: 'copy-connection'
subscriptionId: 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e'
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 i detalj.
deploymentScope
: Välj omfånget för distributionen från alternativen:Management Group
,Subscription
ochResource 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
ochlocation
: 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 filkopieringsuppgiften 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: 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e'
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
- Information om hur du använder konsekvensåtgärden i en pipeline finns i Testa ARM-mallar med Konsekvens i en pipeline.
- Mer information om hur du använder ARM-mallar med GitHub Actions finns i Distribuera Azure Resource Manager-mallar med hjälp av GitHub Actions.