Integrar modelos do Resource Manager com Pipelines do Azure
Você pode integrar modelos do Azure Resource Manager (modelos ARM) com o Azure Pipelines para integração contínua e implantação contínua (CI/CD). Neste artigo, você aprenderá duas maneiras mais avançadas de implantar modelos com o Azure Pipelines.
Selecione a sua opção
Antes de prosseguir com este artigo, vamos considerar as diferentes opções para implantar um modelo ARM a partir de um pipeline.
Use a tarefa de implantação de modelo ARM. Esta opção é a opção mais fácil. Essa abordagem funciona quando você deseja implantar um modelo diretamente de um repositório. Essa opção não é abordada neste artigo, mas é abordada no tutorial Integração contínua de modelos ARM com o Azure Pipelines. Ele mostra como usar a tarefa de implantação de modelo ARM para implantar um modelo a partir do repositório GitHub.
Adicione uma tarefa que executa um script do Azure PowerShell. Essa opção tem a vantagem de fornecer consistência durante todo o ciclo de vida do desenvolvimento, pois você pode usar o mesmo script usado ao executar testes locais. Seu script implanta o modelo, mas também pode executar outras operações, como obter valores para usar como parâmetros. Esta opção é mostrada neste artigo. Consulte Tarefa do Azure PowerShell.
O Visual Studio fornece o projeto do Grupo de Recursos do Azure que inclui um script do PowerShell. O script prepara artefatos do seu projeto para uma conta de armazenamento que o Resource Manager pode acessar. Artefatos são itens em seu projeto, como modelos vinculados, scripts e binários de aplicativos. Se você quiser continuar usando o script do projeto, use a tarefa de script do PowerShell mostrada neste artigo.
Adicione tarefas para copiar e implantar tarefas. Esta opção oferece uma alternativa conveniente ao script do projeto. Você configura duas tarefas no pipeline. Uma tarefa coloca os artefatos em um local acessível. A outra tarefa implanta o modelo a partir desse local. Esta opção é mostrada neste artigo. Consulte Copiar e implantar tarefas.
Prepare o seu projeto
Este artigo pressupõe que seu modelo ARM e a organização do Azure DevOps estejam prontos para criar o pipeline. Os passos seguintes mostram como se certificar de que está pronto:
Você tem uma organização do Azure DevOps. Se você não tiver um, crie um gratuitamente. Se sua equipe já tiver uma organização de DevOps do Azure, verifique se você é um administrador do projeto de DevOps do Azure que deseja usar.
Você configurou uma conexão de serviço para sua assinatura do Azure. As tarefas no pipeline são executadas sob a identidade da entidade de serviço. Para conhecer as etapas para criar a conexão, consulte Criar um projeto de DevOps.
Você tem um modelo ARM que define a infraestrutura para seu projeto.
Criar pipeline
Se você não adicionou um pipeline anteriormente, precisará criar um novo pipeline. Na sua organização do Azure DevOps, selecione Pipelines e Novo pipeline.
Especifique onde o código está armazenado. A imagem a seguir mostra a seleção do Azure Repos Git.
A partir dessa fonte, selecione o repositório que tem o código para o seu projeto.
Selecione o tipo de pipeline a ser criado. Você pode selecionar Pipeline inicial.
Você está pronto para adicionar uma tarefa do Azure PowerShell ou as tarefas de copiar arquivo e implantar.
Tarefa do Azure PowerShell
Esta seção mostra como configurar a implantação contínua usando uma única tarefa que executa o script PowerShell em seu projeto. Se você precisar de um script do PowerShell que implante um modelo, consulte Deploy-AzTemplate.ps1 ou Deploy-AzureResourceGroup.ps1.
O seguinte arquivo YAML cria uma tarefa do 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 você define a tarefa como AzurePowerShell@5
, o pipeline usa o módulo Az. Se você estiver usando o módulo AzureRM em seu script, defina a tarefa como AzurePowerShell@3
.
steps:
- task: AzurePowerShell@3
Para azureSubscription
, forneça o nome da conexão de serviço que você criou.
inputs:
azureSubscription: '<your-connection-name>'
Para scriptPath
, forneça o caminho relativo do arquivo de pipeline para o script. Você pode procurar em seu repositório para ver o caminho.
ScriptPath: '<your-relative-path>/<script-file-name>.ps1'
No ScriptArguments
, forneça todos os parâmetros necessários para o seu script. O exemplo a seguir mostra alguns parâmetros para um script, mas você precisará personalizar os parâmetros para seu script.
ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json
Quando você seleciona Salvar, o pipeline de compilação é executado automaticamente. Volte para o resumo do pipeline de compilação e observe o status.
Você pode selecionar o pipeline em execução no momento para ver detalhes sobre as tarefas. Quando terminar, você verá os resultados de cada etapa.
Copiar e implantar tarefas
Esta seção mostra como configurar a implantação contínua usando duas tarefas. A primeira tarefa prepara os artefatos em uma conta de armazenamento e a segunda tarefa implanta o modelo.
Para copiar arquivos para uma conta de armazenamento, a entidade de serviço para a conexão de serviço deve receber a função de Colaborador de Dados de Blob de Armazenamento ou Proprietário de Dados de Blob de Armazenamento. Para obter mais informações, consulte Introdução ao AzCopy.
O YAML a seguir mostra a tarefa de cópia de arquivo 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
Há várias partes dessa tarefa a serem revisadas para seu ambiente. O SourcePath
indica o local dos artefatos em relação ao arquivo de pipeline.
SourcePath: '<path-to-artifacts>'
Para azureSubscription
, forneça o nome da conexão de serviço que você criou.
azureSubscription: '<your-connection-name>'
Para armazenamento e nome do contêiner, forneça os nomes da conta de armazenamento e do contêiner que você deseja usar para armazenar os artefatos. A conta de armazenamento deve existir.
storage: '<your-storage-account-name>'
ContainerName: '<container-name>'
Depois de criar a tarefa de copiar arquivo, você estará pronto para adicionar a tarefa para implantar o modelo em estágios.
O YAML a seguir mostra a tarefa de implantação do modelo do 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'
Há várias partes desta tarefa a analisar mais detalhadamente.
deploymentScope
: Selecione o escopo da implantação nas opções:Management Group
,Subscription
eResource Group
. Para saber mais sobre os escopos, consulte Escopos de implantação.azureResourceManagerConnection
: Forneça o nome da conexão de serviço que você criou.subscriptionId
: Forneça o ID da assinatura de destino. Essa propriedade só se aplica ao escopo de implantação do Grupo de Recursos e ao escopo de implantação da assinatura.resourceGroupName
elocation
: Forneça o nome e o local do grupo de recursos no qual você deseja implantar. A tarefa cria o grupo de recursos se ele não existir.resourceGroupName: '<resource-group-name>' location: '<location>'
csmFileLink
: Forneça o link para o modelo em estágios. Ao definir o valor, use variáveis retornadas da tarefa de cópia de arquivo. O exemplo a seguir vincula a um modelo chamado mainTemplate.json. A pasta chamada modelos é incluída porque aquela para onde a tarefa de cópia de arquivo copiou o arquivo. No seu pipeline, forneça o caminho para o seu modelo e o nome do seu modelo.csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
Seu pipeline se parece com:
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 você seleciona Salvar, o pipeline de compilação é executado automaticamente. No quadro Trabalhos, selecione Trabalho para ver o status do trabalho.
Próximos passos
- Para usar a operação hipotética em um pipeline, consulte Testar modelos ARM com hipóteses em um pipeline.
- Para saber mais sobre como usar modelos ARM com Ações do GitHub, consulte Implantar modelos do Azure Resource Manager usando Ações do GitHub.