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 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 als 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. Het laat zien hoe u de implementatietaak voor ARM-sjablonen gebruikt om een sjabloon te implementeren vanuit uw GitHub-opslagplaats.
Voeg een taak toe waarmee een Azure PowerShell-script wordt uitgevoerd. Deze optie biedt het voordeel van consistentie gedurende de levenscyclus van de ontwikkeling, omdat u hetzelfde script kunt gebruiken dat u hebt gebruikt bij het uitvoeren van lokale tests. Uw script implementeert de sjabloon, maar kan ook andere bewerkingen uitvoeren, zoals het ophalen van waarden die als parameters moeten worden gebruikt. Deze optie wordt weergegeven in dit artikel. Zie de Azure PowerShell-taak.
Visual Studio biedt het Azure Resource Group-project dat een PowerShell-script bevat. Met het script worden artefacten van uw project gefaseerd naar een opslagaccount waartoe Resource Manager toegang heeft. Artefacten zijn items in uw project, zoals gekoppelde sjablonen, scripts en binaire toepassingsbestanden. Als u het script vanuit 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. Met één taak worden de artefacten gefaseerd naar een toegankelijke locatie. Met de andere taak wordt de sjabloon vanaf die locatie geïmplementeerd. Deze optie wordt weergegeven in dit artikel. 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. In de volgende stappen ziet u hoe u zeker weet 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-project maken voor stappen voor het maken van de verbinding.
U hebt een ARM-sjabloon die de infrastructuur voor uw project definieert.
Pijplijn maken
Als u nog geen pijplijn hebt toegevoegd, moet u een nieuwe pijplijn maken. Selecteer in uw Azure DevOps-organisatie pijplijnen en nieuwe pijplijn.
Geef op waar uw code is opgeslagen. In de volgende afbeelding ziet u het selecteren van Azure Repos Git.
Selecteer in die bron de opslagplaats met de code voor uw project.
Selecteer het type pijplijn dat u wilt maken. U kunt Starter-pijplijn selecteren.
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 u Deploy-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 AzurePowerShell@5
instelt op, 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
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 in ScriptArguments
, geef eventuele 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. Ga terug naar de samenvatting voor uw build-pijplijn en bekijk de status.
U kunt de momenteel actieve pijplijn selecteren om details over de taken te bekijken. Wanneer deze 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 gefaseerd naar een opslagaccount en de tweede taak implementeert de sjabloon.
Als u bestanden naar een opslagaccount wilt kopiëren, moet aan de service-principal voor de serviceverbinding de rol Inzender 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 aan van de artefacten ten opzichte van het pijplijnbestand.
SourcePath: '<path-to-artifacts>'
Geef azureSubscription
de naam op van de serviceverbinding die u hebt gemaakt.
azureSubscription: '<your-connection-name>'
Geef voor de 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 voor Azure Resource Manager-sjablonen:
- 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'
Er zijn verschillende onderdelen van deze taak om gedetailleerder te bekijken.
deploymentScope
: Selecteer het bereik van de implementatie in de opties:Management Group
,Subscription
enResource 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
enlocation
: 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 op voor de gefaseerde sjabloon. Wanneer u de waarde instelt, gebruikt u variabelen die worden geretourneerd door de bestandskopietaak. In het volgende voorbeeld wordt een sjabloon met de naam mainTemplate.json gekoppeld. De map met de naam sjablonen is opgenomen omdat de bestandskopietaak het bestand naartoe 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 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: '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'
Wanneer u Opslaan selecteert, wordt de build-pijplijn automatisch uitgevoerd. Selecteer onder het kader Taken de optie Taak om de taakstatus te zien.
Volgende stappen
- Als u de wat-als-bewerking in een pijplijn wilt gebruiken, raadpleegt u ARM-sjablonen testen met What-If in een pijplijn.
- Zie Azure Resource Manager-sjablonen implementeren met Behulp van GitHub Actions voor meer informatie over het gebruik van ARM-sjablonen met GitHub Actions.