Integrare i modelli di Azure Resource Manager con Azure Pipelines
È possibile integrare modelli di Azure Resource Manager (modelli arm) con Azure Pipelines per l'integrazione continua e la distribuzione continua (CI/CD). Questo articolo illustra due modi più avanzati per distribuire modelli con Azure Pipelines.
Selezionare l'opzione
Prima di procedere con questo articolo, si considerino le diverse opzioni per la distribuzione di un modello di Resource Manager da una pipeline.
Usare l'attività di distribuzione del modello di Resource Manager. Questa opzione è l'opzione più semplice. Questo approccio funziona quando si vuole distribuire un modello direttamente da un repository. Questa opzione non è illustrata in questo articolo, ma è descritta nell'esercitazione Integrazione continua dei modelli di Resource Manager con Azure Pipelines. Illustra come usare l'attività di distribuzione del modello di Resource Manager per distribuire un modello dal repository GitHub.
Aggiungere un'attività che esegue uno script di Azure PowerShell. Questa opzione offre il vantaggio di garantire coerenza in tutto il ciclo di vita dello sviluppo, perché è possibile usare lo stesso script usato durante l'esecuzione di test locali. Lo script distribuisce il modello, ma può anche eseguire altre operazioni, ad esempio il recupero di valori da usare come parametri. Questa opzione è illustrata in questo articolo. Vedere Attività di Azure PowerShell.
Visual Studio fornisce il progetto gruppo di risorse di Azure che include uno script di PowerShell. Gli elementi dello script vengono fasi dal progetto a un account di archiviazione a cui Resource Manager può accedere. Gli artefatti sono elementi del progetto, ad esempio modelli collegati, script e file binari dell'applicazione. Se si vuole continuare a usare lo script del progetto, usare l'attività script di PowerShell illustrata in questo articolo.
Aggiungere attività per copiare e distribuire attività. Questa opzione offre un'alternativa pratica allo script del progetto. Configurare due attività nella pipeline. Un'attività mette in fase gli artefatti in una posizione accessibile. L'altra attività distribuisce il modello da tale posizione. Questa opzione è illustrata in questo articolo. Vedere Copiare e distribuire attività.
Preparare il progetto
Questo articolo presuppone che il modello di Resource Manager e l'organizzazione Di Azure DevOps siano pronti per la creazione della pipeline. I passaggi seguenti illustrano come assicurarsi di essere pronti:
Si ha un'organizzazione di Azure DevOps. Se non è disponibile, crearne uno gratuitamente. Se il team ha già un'organizzazione di Azure DevOps, assicurarsi di essere un amministratore del progetto Azure DevOps che si vuole usare.
È stata configurata una connessione al servizio alla sottoscrizione di Azure. Le attività nella pipeline vengono eseguite con l'identità dell'entità servizio. Per la procedura per creare la connessione, vedere Creare un progetto DevOps.
È disponibile un modello di Resource Manager che definisce l'infrastruttura per il progetto.
Creare una pipeline
Se in precedenza non è stata aggiunta una pipeline, è necessario creare una nuova pipeline. Nell'organizzazione di Azure DevOps selezionare Pipeline e Nuova pipeline.
Specificare dove è archiviato il codice. L'immagine seguente mostra la selezione di Git azure Repos.
Da tale origine selezionare il repository con il codice per il progetto.
Selezionare il tipo di pipeline da creare. È possibile selezionare Pipeline di avvio.
È possibile aggiungere un'attività di Azure PowerShell o il file di copia e distribuire le attività.
Attività di Azure PowerShell
Questa sezione illustra come configurare la distribuzione continua usando una singola attività che esegue lo script di PowerShell nel progetto. Se è necessario uno script di PowerShell che distribuisce un modello, vedere Deploy-AzTemplate.ps1 o Deploy-AzureResourceGroup.ps1.
Il file YAML seguente crea un'attività di Azure PowerShell:
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'
Quando si imposta l'attività su AzurePowerShell@5
, la pipeline usa il modulo Az. Se si usa il modulo AzureRM nello script, impostare l'attività su AzurePowerShell@3
.
steps:
- task: AzurePowerShell@3
Per azureSubscription
specificare il nome della connessione al servizio creata.
inputs:
azureSubscription: '<your-connection-name>'
Per scriptPath
specificare il percorso relativo dal file della pipeline allo script. È possibile cercare nel repository per visualizzare il percorso.
ScriptPath: '<your-relative-path>/<script-file-name>.ps1'
In ScriptArguments
specificare i parametri necessari per lo script. L'esempio seguente illustra alcuni parametri per uno script, ma è necessario personalizzare i parametri per lo script.
ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json
Quando si seleziona Salva, la pipeline di compilazione viene eseguita automaticamente. Tornare al riepilogo per la pipeline di compilazione e osservare lo stato.
È possibile selezionare la pipeline attualmente in esecuzione per visualizzare i dettagli sulle attività. Al termine, vengono visualizzati i risultati per ogni passaggio.
Copiare e distribuire attività
Questa sezione illustra come configurare la distribuzione continua usando due attività. La prima attività esegue il fasi degli artefatti in un account di archiviazione e la seconda attività distribuisce il modello.
Per copiare i file in un account di archiviazione, all'entità servizio per la connessione del servizio deve essere assegnato il ruolo Di collaboratore ai dati BLOB Archiviazione o Archiviazione ruolo Proprietario dati BLOB. Per altre informazioni, vedere Introduzione ad AzCopy.
Il codice YAML seguente illustra l'attività di copia file di Azure.
trigger:
- master
pool:
vmImage: 'windows-latest'
steps:
- task: AzureFileCopy@4
inputs:
SourcePath: 'templates'
azureSubscription: 'copy-connection'
Destination: 'AzureBlob'
storage: 'demostorage'
ContainerName: 'projecttemplates'
name: AzureFileCopy
Esistono diverse parti di questa attività da rivedere per l'ambiente. Indica SourcePath
il percorso degli artefatti rispetto al file della pipeline.
SourcePath: '<path-to-artifacts>'
Per azureSubscription
specificare il nome della connessione al servizio creata.
azureSubscription: '<your-connection-name>'
Per l'archiviazione e il nome del contenitore, specificare i nomi dell'account di archiviazione e del contenitore da usare per l'archiviazione degli artefatti. L'account di archiviazione deve esistere.
storage: '<your-storage-account-name>'
ContainerName: '<container-name>'
Dopo aver creato l'attività copia file, è possibile aggiungere l'attività per distribuire il modello a fasi.
Il codice YAML seguente illustra l'attività di distribuzione del modello di Azure Resource Manager:
- 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'
Ci sono diverse parti di questa attività da esaminare in modo più dettagliato.
deploymentScope
: selezionare l'ambito della distribuzione dalle opzioni,Management Group
,Subscription
eResource Group
. Per altre informazioni sugli ambiti, vedere Ambiti di distribuzione.azureResourceManagerConnection
: specificare il nome della connessione al servizio creata.subscriptionId
: specificare l'ID sottoscrizione di destinazione. Questa proprietà si applica solo all'ambito di distribuzione del gruppo di risorse e all'ambito di distribuzione della sottoscrizione.resourceGroupName
elocation
: specificare il nome e la posizione del gruppo di risorse in cui si vuole eseguire la distribuzione. L'attività crea il gruppo di risorse, se non esiste.resourceGroupName: '<resource-group-name>' location: '<location>'
csmFileLink
: specificare il collegamento per il modello di gestione temporanea. Quando si imposta il valore, usare le variabili restituite dall'attività di copia file. Nell'esempio seguente viene collegato un modello denominato mainTemplate.json. La cartella denominata templates è inclusa perché la posizione in cui l'attività di copia file ha copiato il file. Nella pipeline specificare il percorso del modello e il nome del modello.csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
La pipeline ha un aspetto simile al seguente:
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'
Quando si seleziona Salva, la pipeline di compilazione viene eseguita automaticamente. Nel frame Processi selezionare Processo per visualizzare lo stato del processo.
Passaggi successivi
- Per usare l'operazione di simulazione in una pipeline, vedere Testare i modelli di Resource Manager con simulazione in una pipeline.
- Per informazioni sull'uso dei modelli di Resource Manager con GitHub Actions, vedere Distribuire modelli di Azure Resource Manager usando GitHub Actions.