Integrar ARM com as Pipelines do Azure

Pode integrar modelos do Azure Resource Manager (ARM modelos) com os Azure Pipelines para integração contínua e implementação contínua (CI/CD). Neste artigo, vai aprender duas formas mais avançadas de implementar modelos com as Pipelines do Azure.

Selecione a sua opção

Antes de continuar com este artigo, vamos ponderar as diferentes opções para implementar um modelo ARM de um pipeline.

  • Utilize ARM de implementação de modelo. Esta opção é a opção mais fácil. Esta abordagem funciona quando pretende implementar um modelo diretamente a partir de um repositório. Esta opção não é abrangida neste artigo, mas é abrangida pelo tutorial Integração contínua de modelos ARM com Pipelines do Azure. Mostra como utilizar a tarefa ARM implementação de modelo para implementar um modelo a partir do GitHub repo.

  • Adicione uma tarefa que execute um script Azure PowerShell script. Esta opção tem a vantagem de fornecer consistência ao longo do ciclo de vida de desenvolvimento porque pode utilizar o mesmo script que utilizava durante a execução de testes locais. O seu script implementa o modelo mas também pode efetuar outras operações, como obter valores para utilizar como parâmetros. Esta opção é apresentada neste artigo. Consulte Azure PowerShell tarefa.

    Visual Studio fornece o projeto Azure Resource Group que inclui um script do PowerShell. As etapas de script são representadas a partir do seu projeto para uma conta de armazenamento à que o Gestor de Recursos pode aceder. Os artefactos são itens no seu projeto, como modelos ligados, scripts e binários de aplicações. Se quiser continuar a utilizar o script do projeto, utilize a tarefa de script do PowerShell apresentada neste artigo.

  • Adicione tarefas para copiar e implementar tarefas. Esta opção oferece uma alternativa conveniente ao script do projeto. Pode configurar duas tarefas no pipeline. Uma tarefa faseia as artefactos para uma localização acessível. A outra tarefa implementa o modelo a partir da localização em que se encontra. Esta opção é apresentada neste artigo. Consulte Copiar e implementar tarefas.

Preparar o seu projeto

Este artigo assume que o ARM e a organização Azure DevOps estão prontos para criar o pipeline. Os passos seguintes mostram como se pode certificar de que está pronto:

  • Tem uma organização do Azure DevOps. Se ainda não tiver, crie uma gratuitamente. Se a sua equipa já tiver uma organização de DevOps do Azure, certifique-se de que é um administrador do projeto DevOps do Azure que pretende utilizar.

  • Configurou uma ligação de serviço à sua subscrição do Azure. As tarefas no pipeline são executadas sob a identidade do principal de serviço. Para ver os passos para criar a ligação, consulte Criar um projeto DevOps.

  • Tem um modelo ARM que define a infraestrutura do seu projeto.

Criar pipeline

  1. Se não adicionou um pipeline anteriormente, tem de criar um novo pipeline. Na sua organização de DevOps do Azure, selecione Pipelines e Novo pipeline.

    Add new pipeline

  2. Especifique onde o seu código está armazenado. A imagem seguinte mostra a seleção do Azure Repos Git.

    Select code source

  3. A partir da origem, selecione o repositório que tem o código para o seu projeto.

    Select repository

  4. Selecione o tipo de pipeline a criar. Pode selecionar Starter pipeline.

    Select pipeline

Está pronto para adicionar uma tarefa Azure PowerShell ou copiar o ficheiro e implementar tarefas.

Azure PowerShell tarefa

Esta secção mostra como configurar a implementação contínua com uma única tarefa que executa o script do PowerShell no seu projeto. Se precisar de um script do PowerShell que implemente um modelo, consulte oDeploy-AzTemplate.ps1ouDeploy-AzureResourceGroup.ps1.

O ficheiro YAML seguinte cria uma Azure PowerShell tarefa simples:

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 define a tarefa como AzurePowerShell@5 , o pipeline utiliza o AzurePowerShell@5. Se estiver a utilizar o módulo AzureRM no seu script, defina a tarefa como AzurePowerShell@3 .

steps:
- task: AzurePowerShell@3

Em azureSubscription , forneça o nome da ligação de serviço que criou.

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

Em scriptPath , forneça o caminho relativo do ficheiro pipeline para o seu script. Pode procurar no seu repositório para ver o caminho.

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

Em ScriptArguments , forneça os parâmetros necessários ao seu script. O exemplo seguinte mostra alguns parâmetros de um script, mas terá de personalizar os parâmetros do seu script.

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

Quando seleciona Guardar, o pipeline de comtrução é executado automaticamente. Volte ao resumo das suas pipelines de comtrução e veja o estado.

View results

Pode selecionar o pipeline atualmente em execução para ver detalhes sobre as tarefas. Quando terminar, verá os resultados de cada passo.

Copiar e implementar tarefas

Esta secção mostra como configurar a implementação contínua ao utilizar duas tarefas. A primeira tarefa fase os artefactos para uma conta de armazenamento e a segunda tarefa implementa o modelo.

Para copiar ficheiros para uma conta de armazenamento, tem de lhe ser atribuída a função principal de serviço para a ligação de serviço Armazenamento de Dados Blob ou Armazenamento de Proprietário de Dados de Blob. Para obter mais informações, consulte Começar a trabalhar com o AzCopy.

O YAML seguinte mostra a tarefa de cópia do ficheiro do 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

Existem várias partes desta tarefa a rever para o seu ambiente. Indica SourcePath a localização dos artefactos relativos ao ficheiro em pipeline.

SourcePath: '<path-to-artifacts>'

Em azureSubscription , forneça o nome da ligação de serviço que criou.

azureSubscription: '<your-connection-name>'

Para o nome do contentor e armazenamento, forneça os nomes da conta de armazenamento e do contentor que pretende utilizar para armazenar os artefactos. A conta de armazenamento tem de existir.

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

Depois de criar a tarefa de copiar o ficheiro, está pronto para adicionar a tarefa para implementar o modelo faseado.

O YAML seguinte mostra a tarefa de implementação do modelo do Gestor de Recursos do Azure:

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

Existem várias partes desta tarefa para rever com maior detalhe.

  • deploymentScope: Selecione o âmbito da implementação a partir das opções: Management GroupSubscription , e Resource Group . Para saber mais sobre os âmbitos, consulte Âmbitos de implementação.

  • azureResourceManagerConnection: Forneça o nome da ligação de serviço que criou.

  • subscriptionId: Forneça o ID de subscrição de destino. Esta propriedade só se aplica ao âmbito de implementação do Grupo de Recursos e ao âmbito de implementação da subscrição.

  • resourceGroupName e location : forneça o nome e a localização do grupo de recursos em que pretende implementar. A tarefa cria o grupo de recursos se este não existir.

    resourceGroupName: '<resource-group-name>'
    location: '<location>'
    
  • csmFileLink: Forneça a ligação para o modelo faseado. Ao definir o valor, utilize variáveis devolvidas da tarefa de cópia de ficheiro. O exemplo seguinte liga a um modelo denominado MainTemplate.json. A pasta com o nome modelos é incluída porque a tarefa de cópia do ficheiro copiou o ficheiro para o qual foi copiada. No pipeline, forneça o caminho para o seu modelo e o nome do seu modelo.

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

O seu pipeline tem o aspa de:

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'

Quando seleciona Guardar, o pipeline de comtrução é executado automaticamente. Volte ao resumo das suas pipelines de comtrução e veja o estado.

Passos seguintes

  • Para utilizar a operação de e-ARM num pipeline, consulte Testar ARM com What-If num pipeline.
  • Para saber mais sobre como utilizar ARM com GitHub Ações, consulte Implementar modelos do Gestor de Recursos do Azure ao utilizar GitHub Ações.