Integrare i modelli ARM con Azure PipelinesIntegrate ARM templates with Azure Pipelines

Visual Studio fornisce il progetto gruppo di risorse di Azure per la creazione di modelli di Azure Resource Manager (ARM) e la relativa distribuzione nella sottoscrizione di Azure.Visual Studio provides the Azure Resource Group project for creating Azure Resource Manager (ARM) templates and deploying them to your Azure subscription. È possibile integrare questo progetto con Azure Pipelines per l'integrazione continua e la distribuzione continua (CI/CD).You can integrate this project with Azure Pipelines for continuous integration and continuous deployment (CI/CD).

Esistono due modi per distribuire i modelli con Azure Pipelines:There are two ways to deploy templates with Azure Pipelines:

  • Aggiungere un'attività che esegue uno script Azure PowerShell.Add task that runs an Azure PowerShell script. Questa opzione offre il vantaggio di garantire la coerenza durante tutto il ciclo di vita dello sviluppo, perché si usa lo stesso script incluso nel progetto di Visual Studio (Deploy-azureresourcegroup. ps1).This option has the advantage of providing consistency throughout the development life cycle because you use the same script that is included in the Visual Studio project (Deploy-AzureResourceGroup.ps1). Lo script crea una fase di creazione degli artefatti dal progetto a un account di archiviazione a cui Gestione risorse può accedere.The script stages artifacts from your project to a storage account that Resource Manager can access. Gli artefatti sono elementi del progetto, ad esempio modelli collegati, script e file binari dell'applicazione.Artifacts are items in your project such as linked templates, scripts, and application binaries. Quindi, lo script distribuisce il modello.Then, the script deploys the template.

  • Aggiunta di attività per la copia e la distribuzione di attività.Add tasks to copy and deploy tasks. Questa opzione offre una comoda alternativa allo script del progetto.This option offers a convenient alternative to the project script. Si configurano due attività nella pipeline.You configure two tasks in the pipeline. Un'attività esegue la fase degli artefatti e l'altra distribuisce il modello.One task stages the artifacts and the other task deploys the template.

Questo articolo illustra entrambi gli approcci.This article shows both approaches.

Preparare il progettoPrepare your project

Questo articolo presuppone che il progetto di Visual Studio e l'organizzazione DevOps di Azure siano pronti per la creazione della pipeline.This article assumes your Visual Studio project and Azure DevOps organization are ready for creating the pipeline. I passaggi seguenti illustrano come assicurarsi di essere pronti:The following steps show how to make sure you're ready:

Creare una pipelineCreate pipeline

  1. Se non è stata aggiunta una pipeline in precedenza, è necessario creare una nuova pipeline.If you haven't added a pipeline previously, you need to create a new pipeline. Dall'organizzazione DevOps di Azure selezionare pipeline e nuova pipeline.From your Azure DevOps organization, select Pipelines and New pipeline.

    Aggiungi nuova pipeline

  2. Specificare la posizione in cui è archiviato il codice.Specify where your code is stored. La figura seguente mostra la selezione di Azure Repos git.The following image shows selecting Azure Repos Git.

    Seleziona origine codice

  3. Da tale origine selezionare il repository che contiene il codice per il progetto.From that source, select the repository that has the code for your project.

    Seleziona repository

  4. Consente di selezionare il tipo di pipeline da creare.Select the type of pipeline to create. È possibile selezionare pipeline di avvio.You can select Starter pipeline.

    Seleziona pipeline

È ora possibile aggiungere un'attività di Azure PowerShell o il file di copia e distribuire le attività.You're ready to either add an Azure PowerShell task or the copy file and deploy tasks.

Attività Azure PowerShellAzure PowerShell task

Questa sezione illustra come configurare la distribuzione continua usando una singola attività che esegue lo script di PowerShell nel progetto.This section shows how to configure continuous deployment by using a single task that runs the PowerShell script in your project. Il file YAML seguente crea un' attività Azure PowerShell:The following YAML file creates an Azure PowerShell task:

pool:
  name: Hosted Windows 2019 with VS2019
  demands: azureps

steps:
- task: AzurePowerShell@3
  inputs:
    azureSubscription: 'demo-deploy-sp'
    ScriptPath: 'AzureResourceGroupDemo/Deploy-AzureResourceGroup.ps1'
    ScriptArguments: -ResourceGroupName 'demogroup' -ResourceGroupLocation 'centralus'
    azurePowerShellVersion: LatestVersion

Quando si imposta l'attività su AzurePowerShell@3, la pipeline usa i comandi del modulo AzureRM per autenticare la connessione.When you set the task to AzurePowerShell@3, the pipeline uses commands from the AzureRM module to authenticate the connection. Per impostazione predefinita, lo script di PowerShell nel progetto di Visual Studio usa il modulo AzureRM.By default, the PowerShell script in the Visual Studio project uses the AzureRM module. Se lo script è stato aggiornato per usare il modulo AZ, impostare l'attività su AzurePowerShell@4.If you've updated your script to use the Az module, set the task to AzurePowerShell@4.

steps:
- task: AzurePowerShell@4

Per azureSubscription, specificare il nome della connessione al servizio creata.For azureSubscription, provide the name of the service connection you created.

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

Per scriptPath, specificare il percorso relativo dal file della pipeline allo script.For scriptPath, provide the relative path from the pipeline file to your script. È possibile esaminare il repository per visualizzare il percorso.You can look in your repository to see the path.

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

Se non è necessario gestire gli artefatti, è sufficiente passare il nome e il percorso di un gruppo di risorse da usare per la distribuzione.If you don't need to stage artifacts, just pass the name and location of a resource group to use for deployment. Lo script di Visual Studio crea il gruppo di risorse, se non esiste già.The Visual Studio script creates the resource group if it doesn't already exist.

ScriptArguments: -ResourceGroupName '<resource-group-name>' -ResourceGroupLocation '<location>'

Se è necessario organizzare gli artefatti in un account di archiviazione esistente, usare:If you need to stage artifacts to an existing storage account, use:

ScriptArguments: -ResourceGroupName '<resource-group-name>' -ResourceGroupLocation '<location>' -UploadArtifacts -ArtifactStagingDirectory '$(Build.StagingDirectory)' -StorageAccountName '<your-storage-account>'

Ora che si è appreso come creare l'attività, procedere con la procedura per modificare la pipeline.Now, that you understand how to create the task, let's go through the steps to edit the pipeline.

  1. Aprire la pipeline e sostituire il contenuto con YAML:Open your pipeline, and replace the contents with your YAML:

    pool:
      name: Hosted Windows 2019 with VS2019
      demands: azureps
    
    steps:
    - task: AzurePowerShell@3
      inputs:
        azureSubscription: 'demo-deploy-sp'
        ScriptPath: 'AzureResourceGroupDemo/Deploy-AzureResourceGroup.ps1'
        ScriptArguments: -ResourceGroupName 'demogroup' -ResourceGroupLocation 'centralus' -UploadArtifacts -ArtifactStagingDirectory '$(Build.StagingDirectory)' -StorageAccountName 'stage3a4176e058d34bb88cc'
        azurePowerShellVersion: LatestVersion
    
  2. Selezionare Salva.Select Save.

    Salvare la pipeline

  3. Fornire un messaggio per il commit ed eseguire il commit direttamente nel database master.Provide a message for the commit, and commit directly to master.

  4. Quando si seleziona Salva, la pipeline di compilazione viene eseguita automaticamente.When you select Save, the build pipeline is automatically run. Tornare al riepilogo per la pipeline di compilazione e controllare lo stato.Go back to the summary for your build pipeline, and watch the status.

    Visualizzazione dei risultati

È possibile selezionare la pipeline attualmente in esecuzione per visualizzare i dettagli relativi alle attività.You can select the currently running pipeline to see details about the tasks. Al termine, vengono visualizzati i risultati per ogni passaggio.When it finishes, you see the results for each step.

Copiare e distribuire attivitàCopy and deploy tasks

In questa sezione viene illustrato come configurare la distribuzione continua utilizzando due attività per organizzare gli elementi e distribuire il modello.This section shows how to configure continuous deployment by using a two tasks to stage the artifacts and deploy the template.

Il seguente YAML mostra l' attività copia file di Azure:The following YAML shows the Azure file copy task:

- task: AzureFileCopy@3
  displayName: 'Stage files'
  inputs:
    SourcePath: 'AzureResourceGroup1'
    azureSubscription: 'demo-deploy-sp'
    Destination: 'AzureBlob'
    storage: 'stage3a4176e058d34bb88cc'
    ContainerName: 'democontainer'
    outputStorageUri: 'artifactsLocation'
    outputStorageContainerSasToken: 'artifactsLocationSasToken'
    sasTokenTimeOutInMinutes: '240'

Esistono diverse parti di questa attività da rivedere per l'ambiente in uso.There are several parts of this task to revise for your environment. SourcePath Indica la posizione degli elementi relativi al file della pipeline.The SourcePath indicates the location of the artifacts relative to the pipeline file. In questo esempio, i file sono presenti in una cartella AzureResourceGroup1 denominata che è il nome del progetto.In this example, the files exist in a folder named AzureResourceGroup1 which was the name of the project.

SourcePath: '<path-to-artifacts>'

Per azureSubscription, specificare il nome della connessione al servizio creata.For azureSubscription, provide the name of the service connection you created.

azureSubscription: '<your-connection-name>'

Per archiviazione e nome contenitore specificare i nomi dell'account di archiviazione e del contenitore che si vuole usare per archiviare gli artefatti.For storage and container name, provide the names of the storage account and container you want to use for storing the artifacts. L'account di archiviazione deve esistere.The storage account must exist.

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

Il YAML seguente mostra l' attività di distribuzione del modello di Azure Resource Manager:The following YAML shows the Azure Resource Manager template deployment task:

- task: AzureResourceGroupDeployment@2
  displayName: 'Deploy template'
  inputs:
    deploymentScope: 'Resource Group'
    ConnectedServiceName: 'demo-deploy-sp'
    subscriptionName: '01234567-89AB-CDEF-0123-4567890ABCDEF'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'demogroup'
    location: 'Central US'
    templateLocation: 'URL of the file'
    csmFileLink: '$(artifactsLocation)WebSite.json$(artifactsLocationSasToken)'
    csmParametersFileLink: '$(artifactsLocation)WebSite.parameters.json$(artifactsLocationSasToken)'
    overrideParameters: '-_artifactsLocation $(artifactsLocation) -_artifactsLocationSasToken "$(artifactsLocationSasToken)"'
    deploymentMode: 'Incremental'

Esistono diverse parti di questa attività da rivedere per l'ambiente in uso.There are several parts of this task to revise for your environment.

  • deploymentScope: Selezionare l'ambito di distribuzione dalle opzioni: Management Group Subscription e. Resource GroupdeploymentScope: Select the scope of deployment from the options: Management Group, Subscription and Resource Group. Usare il gruppo di risorse in questa procedura dettagliata.Use Resource Group in this walk through. Per altre informazioni sugli ambiti, vedere Ambiti di distribuzione.To learn more about the scopes, see Deployment scopes.

  • ConnectedServiceName: Specificare il nome della connessione al servizio creata.ConnectedServiceName: Provide the name of the service connection you created.

    ConnectedServiceName: '<your-connection-name>'
    
  • subscriptionName: Specificare l'ID sottoscrizione di destinazione.subscriptionName: Provide the target subscription ID. Questa proprietà si applica solo all'ambito di distribuzione del gruppo di risorse e all'ambito di distribuzione della sottoscrizione.This property only applies to the Resource Group deployment scope and the subscription deployment scope.

  • resourceGroupNamee location: specificare il nome e il percorso del gruppo di risorse in cui si vuole eseguire la distribuzione.resourceGroupName and location: provide the name and location of the resource group you want to deploy to. L'attività crea il gruppo di risorse, se non esiste.The task creates the resource group if it doesn't exist.

    resourceGroupName: '<resource-group-name>'
    location: '<location>'
    

L'attività di distribuzione è collegata a un WebSite.json modello denominato e a un file di parametri denominato website. Parameters. JSON.The deployment task links to a template named WebSite.json and a parameters file named WebSite.parameters.json. Usare i nomi dei file di modello e di parametri.Use the names of your template and parameter files.

Ora che si è appreso come creare le attività, procedere con la procedura per modificare la pipeline.Now, that you understand how to create the tasks, let's go through the steps to edit the pipeline.

  1. Aprire la pipeline e sostituire il contenuto con YAML:Open your pipeline, and replace the contents with your YAML:

    pool:
      name: Hosted Windows 2019 with VS2019
    
    steps:
    - task: AzureFileCopy@3
      displayName: 'Stage files'
      inputs:
        SourcePath: 'AzureResourceGroup1'
        azureSubscription: 'demo-deploy-sp'
        Destination: 'AzureBlob'
        storage: 'stage3a4176e058d34bb88cc'
        ContainerName: 'democontainer'
        outputStorageUri: 'artifactsLocation'
        outputStorageContainerSasToken: 'artifactsLocationSasToken'
        sasTokenTimeOutInMinutes: '240'
     - task: AzureResourceGroupDeployment@2
       displayName: 'Deploy template'
       inputs:
         deploymentScope: 'Resource Group'
         ConnectedServiceName: 'demo-deploy-sp'
         subscriptionName: '01234567-89AB-CDEF-0123-4567890ABCDEF'
         action: 'Create Or Update Resource Group'
         resourceGroupName: 'demogroup'
         location: 'Central US'
         templateLocation: 'URL of the file'
         csmFileLink: '$(artifactsLocation)WebSite.json$(artifactsLocationSasToken)'
         csmParametersFileLink: '$(artifactsLocation)WebSite.parameters.json$(artifactsLocationSasToken)'
         overrideParameters: '-_artifactsLocation $(artifactsLocation) -_artifactsLocationSasToken "$(artifactsLocationSasToken)"'
         deploymentMode: 'Incremental'
    
  2. Selezionare Salva.Select Save.

  3. Fornire un messaggio per il commit ed eseguire il commit direttamente nel database master.Provide a message for the commit, and commit directly to master.

  4. Quando si seleziona Salva, la pipeline di compilazione viene eseguita automaticamente.When you select Save, the build pipeline is automatically run. Tornare al riepilogo per la pipeline di compilazione e controllare lo stato.Go back to the summary for your build pipeline, and watch the status.

    Visualizzazione dei risultati

È possibile selezionare la pipeline attualmente in esecuzione per visualizzare i dettagli relativi alle attività.You can select the currently running pipeline to see details about the tasks. Al termine, vengono visualizzati i risultati per ogni passaggio.When it finishes, you see the results for each step.

Passaggi successiviNext steps

Per un processo dettagliato sull'uso di Azure Pipelines con i modelli ARM, vedere esercitazione: integrazione continua di modelli di Azure Resource Manager con Azure Pipelines.For step-by-step process on using Azure Pipelines with ARM templates, see Tutorial: Continuous integration of Azure Resource Manager templates with Azure Pipelines.