Integrar modelos do Resource Manager com Azure Pipelines
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ê aprende duas maneiras mais avançadas de implantar modelos com o Azure Pipelines.
Selecionar sua opção
Antes de prosseguir com este artigo, vamos considerar as diferentes opções para implantar um modelo do ARM de um pipeline.
Usar uma tarefa de implantação de modelo do ARM. Essa opção é a 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. Em vez disso, é abordada no tutorial Integração contínua de modelos do ARM com Azure Pipelines. Ele mostra como usar a tarefa de implantação de modelo do ARM para implantar um modelo do seu repositório GitHub.
Adicionar tarefa que executa um script do Azure PowerShell. Essa opção tem a vantagem de fornecer consistência em todo o ciclo de vida de desenvolvimento, pois você pode usar o mesmo script que usou ao executar testes locais. O script implanta o modelo, mas também pode executar outras operações, como obter valores para usar como parâmetros. Essa 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 os artefatos do seu projeto para uma conta de armazenamento que o Gerenciador de Recursos pode acessar. Os 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 Script do PowerShell mostrada neste artigo.
Adicionar tarefas para copiar e implantar tarefas. Essa opção oferece uma alternativa conveniente para o script do projeto. Você configura duas tarefas no pipeline. Uma tarefa prepara os artefatos para um local acessível. A outra implanta o modelo desse local. Essa opção é mostrada neste artigo. Consulte Copiar e implantar tarefas.
Preparar seu projeto
Este artigo pressupõe que o modelo do ARM e a organização do Azure DevOps estão prontos para criar o pipeline. As etapas a seguir mostram como se certificar de que você está pronto:
Você tem uma organização do Azure DevOps. Caso não tenha uma, crie uma gratuitamente. Se sua equipe já tiver uma organização do Azure DevOps, verifique se você é um administrador do projeto do Azure DevOps 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 obter as etapas para criar a conexão, consulte Criar um projeto DevOps.
Você tem um modelo do ARM que define a infraestrutura para seu projeto.
Criar um pipeline
Se você ainda não adicionou um pipeline anteriormente, precisará criar um novo pipeline. Na organização do Azure DevOps, selecione Pipelines e Novo pipeline.
Especifique o local em que seu código está armazenado. A imagem a seguir mostra a seleção do Azure Repos Git.
Nessa fonte, selecione o repositório que tem o código para 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 copiar arquivo e implantar tarefas.
Tarefa do Azure PowerShell
Esta seção mostra como configurar a implantação contínua usando uma única tarefa que executa o script do PowerShell em seu projeto. Se você precisar de um script do PowerShell que implanta 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'
Em ScriptArguments
, forneça todos os parâmetros necessários para o script. O exemplo a seguir mostra alguns parâmetros para um script, mas você precisará personalizar os parâmetros para o script.
ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json
Quando você seleciona Salvar, o pipeline de build é executado automaticamente. Volte para o resumo do pipeline de build e veja o status.
Você pode selecionar o pipeline em execução no momento para ver detalhes sobre as tarefas. Quando ele for concluído, você verá os resultados de cada etapa.
Copiar e implantar tarefas
Esta seção mostra como configurar implantação contínua usando duas tarefas. A primeira tarefa prepara os artefatos para uma conta de armazenamento e a segunda, implanta o modelo.
Para copiar arquivos para uma conta de armazenamento, a entidade de serviço para a conexão de serviço deve ser atribuída à função de proprietário de dados de blob de armazenamento ou 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 o 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 o armazenamento e o 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 cópia de arquivo, você estará pronto para adicionar a tarefa para implantar o modelo preparado.
O YAML a seguir mostra a tarefa de implantação de 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 dessa tarefa a serem examinadas com mais detalhes.
deploymentScope
: Selecione o escopo de implantação nas opções:Management Group
,Subscription
, eResource Group
. Para saber mais sobre os escopos, confira Escopos de implantação.azureResourceManagerConnection
: Forneça o nome da conexão de serviço que você criou.subscriptionId
: Forneça a 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, caso ele não exista.resourceGroupName: '<resource-group-name>' location: '<location>'
csmFileLink
: Forneça o link para o modelo de preparo. Ao definir o valor, use variáveis retornadas da tarefa de cópia de arquivo. O exemplo a seguir contém links para um modelo chamado mainTemplate.json. A pasta denominada modelos está incluída porque a tarefa de cópia de arquivo copiou o arquivo. Em seu pipeline, forneça o caminho para o modelo e o nome do seu modelo.csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
Sua pipeline tem essa aparência:
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 build é executado automaticamente. No quadro Trabalhos, selecione Trabalho para ver o status do trabalho.
Próximas etapas
- Para usar a operação de teste de hipóteses em um pipeline, consulte testar modelos do ARM com teste de hipóteses em um pipeline.
- Para saber mais sobre como usar modelos do ARM com ações do GitHub, consulte Implantar modelos do Azure Resource Manager usando o GitHub Actions.