Integrar modelos do Resource Manager com Pipelines do Azure
Pode integrar modelos do Azure Resource Manager (modelos arm) nos Pipelines do Azure para integração contínua e implementação contínua (CI/CD). Neste artigo, irá aprender duas formas mais avançadas de implementar modelos com o Azure Pipelines.
Selecione a sua opção
Antes de continuar com este artigo, vamos considerar as diferentes opções para implementar um modelo do ARM a partir de um pipeline.
Utilize a tarefa de implementação de modelos do ARM. 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 é abordada no tutorial Integração contínua de modelos do ARM com o Azure Pipelines. Mostra como utilizar a tarefa de implementação de modelos do ARM para implementar um modelo a partir do seu repositório do GitHub.
Adicionar tarefa que executa um script de Azure PowerShell. Esta opção tem a vantagem de fornecer consistência ao longo do ciclo de vida de desenvolvimento, uma vez que pode utilizar o mesmo script que utilizou ao executar testes locais. O script implementa o modelo, mas também pode realizar outras operações, como obter valores para utilizar como parâmetros. Esta opção é apresentada neste artigo. Veja Azure PowerShell tarefa.
O Visual Studio fornece o projeto do Grupo de Recursos do Azure que inclui um script do PowerShell. O script prepara artefactos do projeto para uma conta de armazenamento à qual Resource Manager 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 prepara os artefactos para uma localização acessível. A outra tarefa implementa o modelo a partir dessa localização. Esta opção é apresentada neste artigo. Veja Copiar e implementar tarefas.
Preparar o projeto
Este artigo pressupõe que o modelo arm e a organização do Azure DevOps estão prontos para criar o pipeline. Os passos seguintes mostram como se certificar de que está pronto:
Tem uma organização do Azure DevOps. Se não tiver uma, crie uma gratuitamente. Se a sua equipa já tiver uma organização do Azure DevOps, certifique-se de que é um administrador do projeto do Azure DevOps 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 obter os passos para criar a ligação, veja Criar um projeto de DevOps.
Tem um modelo do ARM que define a infraestrutura para o seu projeto.
Criar pipeline
Se ainda não adicionou um pipeline, tem de 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 seguinte mostra a seleção do Git de Repositórios do Azure.
Nessa origem, selecione o repositório que tem o código para o projeto.
Selecione o tipo de pipeline a criar. Pode selecionar Pipeline de arranque.
Está pronto para adicionar uma tarefa Azure PowerShell ou o ficheiro de cópia e implementar tarefas.
Tarefa do Azure PowerShell
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 Deploy-AzTemplate.ps1 ou Deploy-AzureResourceGroup.ps1.
O seguinte ficheiro YAML cria uma tarefa 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 define a tarefa como AzurePowerShell@5
, o pipeline utiliza o módulo Az. Se estiver a utilizar o módulo AzureRM no script, defina a tarefa como AzurePowerShell@3
.
steps:
- task: AzurePowerShell@3
Para azureSubscription
, indique o nome da ligação de serviço que criou.
inputs:
azureSubscription: '<your-connection-name>'
Para scriptPath
, forneça o caminho relativo do ficheiro de pipeline para o script. Pode procurar no 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 script. O exemplo seguinte mostra alguns parâmetros para um script, mas terá de personalizar os parâmetros do script.
ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json
Quando seleciona Guardar, o pipeline de compilação é executado automaticamente. Voltar ao resumo do pipeline de compilação e watch o estado.
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 com duas tarefas. A primeira tarefa prepara os artefactos para uma conta de armazenamento e a segunda tarefa implementa o modelo.
Para copiar ficheiros para uma conta de armazenamento, o principal de serviço da ligação de serviço tem de ser atribuído à função Contribuidor de Dados de Blobs de Armazenamento ou Proprietário de Dados de Blobs de Armazenamento. Para obter mais informações, veja Introdução ao AzCopy.
O YAML seguinte mostra a tarefa de cópia de ficheiros 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 relativamente ao ficheiro de pipeline.
SourcePath: '<path-to-artifacts>'
Para azureSubscription
, indique o nome da ligação de serviço que criou.
azureSubscription: '<your-connection-name>'
Para o nome do contentor e do 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 copiar ficheiro, está pronto para adicionar a tarefa para implementar o modelo faseado.
O YAML seguinte mostra a tarefa de implementação do modelo do Azure Resource Manager:
- 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 a rever mais detalhadamente.
deploymentScope
: selecione o âmbito da implementação nas opções:Management Group
,Subscription
eResource Group
. Para saber mais sobre os âmbitos, veja Âmbitos de implementação.azureResourceManagerConnection
: indique o nome da ligação de serviço que criou.subscriptionId
: Indique o ID da subscrição de destino. Esta propriedade aplica-se apenas ao âmbito de implementação do Grupo de Recursos e ao âmbito de implementação da subscrição.resourceGroupName
elocation
: indique o nome e a localização do grupo de recursos no qual pretende implementar. A tarefa cria o grupo de recursos se não existir.resourceGroupName: '<resource-group-name>' location: '<location>'
csmFileLink
: forneça a ligação para o modelo faseado. Ao definir o valor, utilize as variáveis devolvidas da tarefa de cópia de ficheiro. O exemplo seguinte liga a um modelo com o nome mainTemplate.json. A pasta com o nome modelos está incluída porque a tarefa de cópia do ficheiro copiou o ficheiro para. No seu pipeline, forneça o caminho para o modelo e o nome do modelo.csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
O seu pipeline tem o seguinte aspeto:
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 compilação é executado automaticamente. Na moldura Tarefas , selecione Tarefa para ver o estado da tarefa.
Passos seguintes
- Para utilizar a operação what-if num pipeline, veja Testar modelos do ARM com What-If num pipeline.
- Para saber mais sobre como utilizar modelos arm com GitHub Actions, veja Implementar modelos do Azure Resource Manager com GitHub Actions.