Intégrer des modèles ARM avec Azure PipelinesIntegrate ARM templates with Azure Pipelines

Vous pouvez intégrer des modèles Azure Resource Manager (modèles ARM) avec Azure Pipelines pour l’intégration continue et le déploiement continu (CI/CD).You can integrate Azure Resource Manager templates (ARM templates) with Azure Pipelines for continuous integration and continuous deployment (CI/CD). Le tutoriel Intégration continue des modèles ARM avec Azure Pipelines montre comment utiliser la tâche de déploiement ARM pour déployer un modèle à partir de votre dépôt GitHub.The tutorial Continuous integration of ARM templates with Azure Pipelines shows how to use the ARM template deployment task to deploy a template from your GitHub repo. Cette approche fonctionne lorsque vous souhaitez déployer un modèle directement à partir d’un dépôt.This approach works when you want to deploy a template directly from a repository.

Dans cet article, vous allez apprendre deux autres façons de déployer des modèles avec Azure Pipelines.In this article, you learn two more ways to deploy templates with Azure Pipelines. Cet article montre comment :This article shows how to:

  • Ajouter une tâche exécutant un script Azure PowerShell.Add task that runs an Azure PowerShell script. Cette option présente l’avantage de fournir une cohérence tout au long du cycle de vie du développement, car vous pouvez utiliser le script que vous avez utilisé lors de l’exécution des tests locaux.This option has the advantage of providing consistency throughout the development life cycle because you can use the same script that you used when running local tests. Votre script déploie le modèle, mais peut également exécuter d’autres opérations telles que l’obtention de valeurs à utiliser en tant que paramètres.Your script deploys the template but can also perform other operations such as getting values to use as parameters.

    Visual Studio fournit le projet de groupe de ressources Azure qui inclut un script PowerShell.Visual Studio provides the Azure Resource Group project that includes a PowerShell script. Le script organise les artefacts de votre projet comme un compte de stockage auquel Resource Manager peut accéder.The script stages artifacts from your project to a storage account that Resource Manager can access. Les artefacts sont des éléments dans votre projet comme les modèles liés, les scripts et les fichiers binaires d’application.Artifacts are items in your project such as linked templates, scripts, and application binaries. Si vous souhaitez continuer à utiliser le script à partir du projet, utilisez la tâche de script PowerShell présentée dans cet article.If you want to continue using the script from the project, use the PowerShell script task shown in this article.

  • Ajouter des tâches pour copier et déployer des tâches.Add tasks to copy and deploy tasks. Cette deuxième option est une alternative pratique au script de projet.This option offers a convenient alternative to the project script. Vous configurez deux tâches dans le pipeline.You configure two tasks in the pipeline. Une tâche importe les artefacts vers un emplacement accessible.One task stages the artifacts to an accessible location. L’autre tâche déploie le modèle à partir de cet emplacement.The other task deploys the template from that location.

Préparation du projetPrepare your project

Cet article suppose que votre modèle ARM et votre organisation Azure DevOps sont prêts pour la création du pipeline.This article assumes your ARM template and Azure DevOps organization are ready for creating the pipeline. Les étapes suivantes montrent comment vérifier que vous êtes prêt :The following steps show how to make sure you're ready:

  • Vous disposez d’une organisation Azure DevOps.You have an Azure DevOps organization. Si vous n’en avez pas, créez-en une gratuitement.If you don't have one, create one for free. Si votre équipe a déjà une organisation Azure DevOps, assurez-vous d’être un administrateur du projet Azure DevOps que vous souhaitez utiliser.If your team already has an Azure DevOps organization, make sure you're an administrator of the Azure DevOps project that you want to use.

  • Vous avez configuré une connexion de service pour votre abonnement Azure.You've configured a service connection to your Azure subscription. Les tâches dans le pipeline s’exécutent sous l’identité du principal du service.The tasks in the pipeline execute under the identity of the service principal. Pour obtenir des instructions sur la création d’une connexion, consultez Créer un projet DevOps.For steps to create the connection, see Create a DevOps project.

  • Vous disposez d’un modèle ARM qui définit l’infrastructure de votre projet.You have an ARM template that defines the infrastructure for your project.

Création d’un pipelineCreate pipeline

  1. Si vous n’avez pas ajouté un pipeline précédemment, vous devez en créer un nouveau.If you haven't added a pipeline previously, you need to create a new pipeline. À partir de votre organisation Azure DevOps, sélectionnez Pipelines et Nouveau pipeline.From your Azure DevOps organization, select Pipelines and New pipeline.

    Ajouter un nouveau pipeline

  2. Spécifiez où votre code est stocké.Specify where your code is stored. L’illustration suivante montre la sélection du Git Azure Repos.The following image shows selecting Azure Repos Git.

    Sélectionner une source de code

  3. À partir de cette source, sélectionnez le référentiel contenant le code de votre projet.From that source, select the repository that has the code for your project.

    Sélectionner un référentiel

  4. Sélectionnez le type de pipeline à créer.Select the type of pipeline to create. Vous pouvez sélectionner Pipeline de démarrage.You can select Starter pipeline.

    Sélectionner un pipeline

Vous êtes prêt à ajouter une tâche Azure PowerShell ou le fichier de copie et à déployer des tâches.You're ready to either add an Azure PowerShell task or the copy file and deploy tasks.

Tâche Azure PowerShellAzure PowerShell task

Cette section montre comment configurer le déploiement continu à l’aide d’une seule tâche qui exécute le script PowerShell dans votre projet.This section shows how to configure continuous deployment by using a single task that runs the PowerShell script in your project. Si vous avez besoin d’un script PowerShell qui déploie un modèle, consultez Deploy-AzTemplate.ps1 ou Deploy-AzureResourceGroup.ps1.If you need a PowerShell script that deploys a template, see Deploy-AzTemplate.ps1 or Deploy-AzureResourceGroup.ps1.

Le fichier YAML suivant crée une tâche Azure PowerShell:The following YAML file creates an Azure PowerShell task:

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'

Lorsque vous définissez la tâche sur AzurePowerShell@5, le pipeline utilise le module AZ.When you set the task to AzurePowerShell@5, the pipeline uses the Az module. Si vous utilisez le module AzureRM dans votre script, définissez la tâche sur AzurePowerShell@3.If you're using the AzureRM module in your script, set the task to AzurePowerShell@3.

steps:
- task: AzurePowerShell@3

Pour azureSubscription, indiquez le nom de la connexion de service créée.For azureSubscription, provide the name of the service connection you created.

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

Pour scriptPath, fournissez le chemin d’accès relatif à partir du fichier de pipeline vers votre script.For scriptPath, provide the relative path from the pipeline file to your script. Vous pouvez rechercher dans votre référentiel pour afficher le chemin d’accès.You can look in your repository to see the path.

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

Dans ScriptArguments, fournissez les paramètres nécessaires à votre script.In ScriptArguments, provide any parameters needed by your script. L’exemple suivant montre quelques paramètres pour un script, mais vous devez personnaliser les paramètres de votre script.The following example shows some parameters for a script, but you'll need to customize the parameters for your script.

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

Lorsque vous sélectionnez Enregistrer , le pipeline de build s’exécute automatiquement.When you select Save , the build pipeline is automatically run. Revenez au résumé de votre pipeline de build et regardez l’état.Go back to the summary for your build pipeline, and watch the status.

Afficher les résultats

Vous pouvez sélectionner le pipeline en cours d’exécution pour afficher plus d’informations sur les tâches.You can select the currently running pipeline to see details about the tasks. Lorsqu’il se termine, vous consultez les résultats pour chaque étape.When it finishes, you see the results for each step.

Tâches de copie et de déploiementCopy and deploy tasks

Cette section montre comment configurer un déploiement continu à l’aide de deux tâches.This section shows how to configure continuous deployment by using a two tasks. La première tâche importe les artefacts dans un compte de stockage et la deuxième tâche déploie le modèle.The first task stages the artifacts to a storage account and the second task deploy the template.

Pour copier des fichiers dans un compte de stockage, le principal du service pour la connexion au service doit se voir attribuer le rôle Contributeur aux données Blob du stockage ou Propriétaire des données Blob du stockage.To copy files to a storage account, the service principal for the service connection must be assigned the Storage Blob Data Contributor or Storage Blob Data Owner role. Pour plus d’informations, consultez Bien démarrer avec AzCopy.For more information, see Get started with AzCopy.

Le fichier YAML suivant montre la tâche de copie de fichiers Azure.The following YAML shows the Azure file copy task.

trigger:
- master

pool:
  vmImage: 'windows-latest'

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

Il existe plusieurs parties de cette tâche à réviser pour votre environnement.There are several parts of this task to revise for your environment. SourcePath indique l’emplacement des artefacts relatifs au fichier de pipeline.The SourcePath indicates the location of the artifacts relative to the pipeline file.

SourcePath: '<path-to-artifacts>'

Pour azureSubscription, indiquez le nom de la connexion de service créée.For azureSubscription, provide the name of the service connection you created.

azureSubscription: '<your-connection-name>'

Pour le nom du stockage et du conteneur, fournissez les noms du compte de stockage et du conteneur que vous souhaitez utiliser pour stocker les artefacts.For storage and container name, provide the names of the storage account and container you want to use for storing the artifacts. Le compte de stockage doit exister.The storage account must exist.

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

Après avoir créé la tâche Copier le fichier, vous êtes prêt à ajouter la tâche pour déployer le modèle intermédiaire.After creating the copy file task, you're ready to add the task to deploy the staged template.

Le YAML suivant montre la tâche de déploiement du modèle Azure Resource Manager :The following YAML shows the Azure Resource Manager template deployment task:

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

Il existe plusieurs parties de cette tâche à examiner plus en détail.There are several parts of this task to review in greater detail.

  • deploymentScope : sélectionnez l’étendue du déploiement à l’aide des options Management Group, Subscription et Resource Group.deploymentScope: Select the scope of deployment from the options: Management Group, Subscription, and Resource Group. Pour en savoir plus sur les étendues, consultez Étendues de déploiement.To learn more about the scopes, see Deployment scopes.

  • azureResourceManagerConnection: Indiquez le nom de la connexion de service créée.azureResourceManagerConnection: Provide the name of the service connection you created.

  • subscriptionId: Spécifiez l’ID de l’abonnement cible.subscriptionId: Provide the target subscription ID. Cette propriété s’applique uniquement à l’étendue de déploiement du groupe de ressources et du déploiement de l’abonnement.This property only applies to the Resource Group deployment scope and the subscription deployment scope.

  • resourceGroupName et location : indiquez le nom et l’emplacement du groupe de ressources au sein duquel vous souhaitez faire le déploiement.resourceGroupName and location: provide the name and location of the resource group you want to deploy to. La tâche crée le groupe de ressources s’il n’existe pas.The task creates the resource group if it doesn't exist.

    resourceGroupName: '<resource-group-name>'
    location: '<location>'
    
  • csmFileLink : indiquez le lien pour le modèle intermédiaire.csmFileLink: Provide the link for the staged template. Lors de la définition de la valeur, utilisez les variables retournées à partir de la tâche de copie de fichiers.When setting the value, use variables returned from the file copy task. L’exemple suivant établit un lien vers un modèle nommé mainTemplate.json.The following example links to a template named mainTemplate.json. Le dossier nommé templates est inclus, car c’est ici que se trouve la tâche de copie de fichiers dans laquelle le fichier a été copié.The folder named templates is included because that where the file copy task copied the file to. Dans votre pipeline, indiquez le chemin d’accès et le nom de votre modèle.In your pipeline, provide the path to your template and the name of your template.

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

Votre pipeline ressemble à ce qui suit :Your pipeline look like:

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'

Lorsque vous sélectionnez Enregistrer , le pipeline de build s’exécute automatiquement.When you select Save , the build pipeline is automatically run. Revenez au résumé de votre pipeline de build et regardez l’état.Go back to the summary for your build pipeline, and watch the status.

Étapes suivantesNext steps

Pour en savoir plus sur l’utilisation des modèles ARM avec GitHub Actions, consultez Déployer des modèles Azure Resource Manager à l’aide de GitHub Actions.To learn about using ARM templates with GitHub Actions, see Deploy Azure Resource Manager templates by using GitHub Actions.