Implantar arquivos Bicep usando um pipeline

Concluído

Agora que você criou um pipeline básico, está pronto para configurá-lo para implantar seus arquivos Bicep. Nesta unidade, você aprenderá como implantar o código Bicep a partir de um pipeline e como configurar as etapas de implantação.

Nota

Os comandos nesta unidade são mostrados para ilustrar conceitos. Não execute os comandos ainda. Você vai praticar o que você aprende aqui em breve.

Ligações de serviço

Ao implantar um arquivo Bicep de seu próprio computador, você usa a CLI do Azure ou o Azure PowerShell. Antes de implantar seu código, entre no Azure. Normalmente, as ferramentas pedem que você insira seu endereço de e-mail e senha em um navegador. Depois que suas credenciais forem verificadas, suas permissões para implantar recursos serão confirmadas e você poderá usar as ferramentas para implantar seu arquivo Bicep.

A implantação por pipeline também requer autenticação. Como os pipelines são executados sem intervenção humana, os pipelines são autenticados no Azure usando uma entidade de serviço. As credenciais de uma entidade de serviço consistem em uma ID de aplicativo e um segredo, que geralmente é uma chave ou um certificado. No Azure Pipelines, você usa uma conexão de serviço para armazenar essas credenciais com segurança para que seu pipeline possa usá-las. Uma conexão de serviço também inclui algumas outras informações para ajudar seu pipeline a identificar o ambiente do Azure no qual você deseja implantar.

Gorjeta

Neste módulo, você usará o Azure DevOps para criar automaticamente uma entidade de serviço quando ela criar uma conexão de serviço. O módulo Autenticar seu pipeline de implantação do Azure usando entidades de serviço fornece uma explicação mais detalhada das entidades de serviço, incluindo como elas funcionam, bem como como você as cria, atribui funções e as gerencia.

Ao criar uma conexão de serviço, você nomeia a conexão. As etapas referem-se à conexão de serviço usando esse nome, portanto, o código YAML do pipeline não precisa conter informações secretas.

Quando o pipeline é iniciado, o agente que está executando as etapas de implantação tem acesso à conexão de serviço, incluindo suas credenciais. Uma etapa de pipeline usa as credenciais para entrar no Azure, assim como você mesmo entra. Em seguida, as ações definidas na etapa usam a identidade da entidade de serviço.

Diagrama que mostra um pipeline que inclui uma etapa de implantação do Azure, que acessa uma conexão de serviço e implanta no Azure.

Você deve garantir que a entidade de serviço tenha as permissões necessárias para executar as etapas de implantação. Por exemplo, talvez seja necessário atribuir à entidade de serviço a função de Colaborador para o grupo de recursos no qual ela implanta seus recursos.

Aviso

Pode parecer mais fácil armazenar as credenciais da entidade de serviço no arquivo YAML e, em seguida, entrar usando o az login comando. Você nunca deve usar essa abordagem para autenticar sua entidade de serviço. As credenciais em um arquivo YAML são armazenadas em texto não criptografado. Qualquer pessoa que tenha acesso ao seu repositório pode ver e usar as credenciais. Mesmo que você restrinja o acesso à sua organização e projeto do Azure DevOps, sempre que alguém clonar seu repositório, o arquivo YAML que contém as credenciais estará no computador dessa pessoa. É importante usar uma conexão de serviço sempre que você trabalhar com o Azure a partir de um pipeline. As conexões de serviço também fornecem outros recursos de segurança e controle de acesso.

As conexões de serviço são criadas em seu projeto do Azure DevOps. Uma única conexão de serviço pode ser compartilhada por vários pipelines. No entanto, geralmente é uma boa ideia configurar uma conexão de serviço e a entidade de serviço correspondente para cada pipeline e cada ambiente em que você implanta. Essa prática ajuda a aumentar a segurança de seus pipelines e reduz a probabilidade de implantar ou configurar recursos acidentalmente em um ambiente diferente do esperado.

Você também pode configurar sua conexão de serviço para que ela possa ser usada apenas em pipelines específicos. Por exemplo, quando você cria uma conexão de serviço que é implantada no ambiente de produção do seu site, é uma boa ideia garantir que apenas o pipeline do seu site possa usar essa conexão de serviço. Restringir uma conexão de serviço a pipelines específicos impede que outra pessoa use acidentalmente a mesma conexão de serviço para um projeto diferente e potencialmente faça com que seu site de produção fique inativo.

Implantar um arquivo Bicep usando a tarefa Implantação do Grupo de Recursos do Azure

Quando precisar implantar um arquivo Bicep a partir de um pipeline, você poderá usar a tarefa Implantação do Grupo de Recursos do Azure. Veja um exemplo de como configurar uma etapa para usar a tarefa:

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    connectedServiceName: 'MyServiceConnection'
    location: 'westus3'
    resourceGroupName: Example
    csmFile: deploy/main.bicep
    overrideParameters: >
        -parameterName parameterValue

A primeira linha especifica AzureResourceManagerTemplateDeployment@3. Ele informa ao Azure Pipelines que a tarefa que você deseja usar para esta etapa tem o nome AzureResourceManagerTemplateDeploymentde , e você deseja usar a versão 3 da tarefa.

Ao usar a tarefa Implantação do Grupo de Recursos do Azure, você especifica entradas para dizer à tarefa o que fazer. Aqui estão algumas entradas que você pode especificar ao usar a tarefa:

  • connectedServiceName é o nome da conexão de serviço a ser usada.
  • location precisa ser especificado, mesmo que seu valor possa não ser usado. A tarefa Implantação do Grupo de Recursos do Azure também pode criar um grupo de recursos para você e, se isso acontecer, precisará saber a região do Azure na qual criar o grupo de recursos. Neste módulo, você especificará o location valor de entrada, mas seu valor não será usado.
  • resourceGroupName especifica o nome do grupo de recursos no qual o arquivo Bicep deve ser implantado.
  • overrideParameters contém quaisquer valores de parâmetro que você deseja passar para o arquivo Bicep no momento da implantação.

Quando a tarefa é iniciada, ela usa a conexão de serviço para entrar no Azure. No momento em que a tarefa executa a implantação que você especificou, a tarefa já foi autenticada. Você não precisa executar az logino .

Executar comandos da CLI do Azure e do Azure PowerShell

Duas das tarefas internas mais úteis no Azure Pipelines são a CLI do Azure e as tarefas do Azure PowerShell. Você pode usar essas tarefas para executar um ou mais comandos da CLI do Azure ou do PowerShell.

Em módulos futuros do Microsoft Learn, você verá como o comando CLI do Azure pode ajudá-lo a automatizar mais partes do seu processo de implantação a partir de um pipeline.

Variáveis

Muitas vezes, seus pipelines contêm valores que você deseja manter separados do seu arquivo YAML. Por exemplo, ao implantar um arquivo Bicep em um grupo de recursos, você especifica o nome do grupo de recursos. O nome do grupo de recursos provavelmente é diferente quando você implanta em ambientes diferentes. Também pode ser necessário fornecer parâmetros para seus arquivos Bicep, incluindo segredos, como senhas do servidor de banco de dados. Não armazene esses valores em seu arquivo YAML de pipeline ou em qualquer outro lugar em seu repositório Git. Em vez disso, para aumentar a segurança e tornar as definições de pipeline reutilizáveis, use variáveis.

Criar uma variável

A interface Web do Azure Pipelines tem um editor que você pode usar para criar variáveis para seu pipeline:

Captura de ecrã do Azure DevOps que mostra a criação de uma nova variável.

Você pode definir um valor de variável do Azure Pipelines como secreto. Quando você define um valor de variável como secreto, não pode visualizá-lo depois de defini-lo. O Azure Pipelines foi projetado para não revelar valores secretos em seus logs de pipeline.

Aviso

Por padrão, o Azure Pipelines ofusca valores de variáveis secretas em logs de pipeline, mas você também precisa seguir boas práticas. As etapas do pipeline têm acesso a todos os valores variáveis, incluindo segredos. Se o pipeline incluir uma etapa que não manipula uma variável segura com segurança, há uma chance de a variável secreta ser mostrada nos logs do pipeline.

Você pode permitir que os usuários substituam um valor variável quando executarem o pipeline manualmente. O valor que um usuário fornece é usado apenas para essa execução de pipeline específica. Substituições variáveis podem ser úteis quando você está testando seu pipeline.

Usar uma variável em seu pipeline

Depois de criar uma variável, você usará uma sintaxe específica para se referir à variável no arquivo YAML do pipeline:

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    connectedServiceName: $(ServiceConnectionName)
    location: $(DeploymentDefaultLocation)
    resourceGroupName: $(ResourceGroupName)
    csmFile: deploy/main.bicep
    overrideParameters: >
      -environmentType $(EnvironmentType)

O formato de arquivo de definição de pipeline inclui uma sintaxe especial $(VariableName) . Você pode fazer referência a qualquer variável usando essa abordagem, seja ela secreta ou não.

Gorjeta

No exemplo anterior, observe que o nome do arquivo Bicep não está armazenado em uma variável. Assim como os parâmetros do Bíceps, você não precisa criar variáveis para tudo. É uma boa ideia criar variáveis para qualquer coisa que possa mudar entre ambientes e para qualquer coisa que seja secreta. Como o pipeline sempre usará o mesmo arquivo de modelo, não é necessário criar uma variável para o caminho.

Variáveis do sistema

O Azure Pipelines também usa variáveis de sistema. As variáveis de sistema contêm informações predefinidas que você pode querer usar em seu pipeline. Aqui estão algumas das variáveis do sistema que você pode usar em seu pipeline:

  • Build.BuildNumber é o identificador exclusivo para a execução do pipeline. Apesar do nome, o Build.BuildNumber valor geralmente é uma cadeia de caracteres, e não um número. Você pode usar essa variável para nomear sua implantação do Azure, para que possa acompanhar a implantação de volta para a execução de pipeline específica que a disparou.
  • Agent.BuildDirectory é o caminho no sistema de arquivos da máquina do agente onde os arquivos da execução do pipeline são armazenados. Essas informações podem ser úteis quando você deseja fazer referência a arquivos no agente de compilação.

Criar variáveis no arquivo YAML do seu pipeline

Além de usar a interface da Web do Azure Pipelines para criar variáveis, você pode definir valores de variáveis no arquivo YAML do pipeline. Você pode usar essa opção quando tiver valores que não são secretos, quando os valores puderem ser armazenados em seu repositório e quando quiser manter valores variáveis em um só lugar no arquivo, para que possa consultá-los em toda a definição de pipeline. Você pode usar essa abordagem para controlar as alterações na variável em seu sistema de controle de versão.

Para definir uma variável no arquivo YAML, adicione uma variables seção:

trigger: none

pool:
  vmImage: ubuntu-latest

variables:
  ServiceConnectionName: 'MyServiceConnection'
  EnvironmentType: 'Test'
  ResourceGroupName: 'MyResourceGroup'
  DeploymentDefaultLocation: 'westus3'

jobs:
- job:
  steps:
  - task: AzureResourceManagerTemplateDeployment@3
    inputs:
      connectedServiceName: $(ServiceConnectionName)
      location: $(DeploymentDefaultLocation)
      resourceGroupName: $(ResourceGroupName)
      csmFile: deploy/main.bicep
      overrideParameters: >
        -environmentType $(EnvironmentType)

Este exemplo de pipeline define quatro variáveis: ServiceConnectionName, EnvironmentType, ResourceGroupNamee DeploymentDefaultLocation.

Mais adiante neste módulo, você verá como pode misturar variáveis definidas em diferentes locais juntas em um pipeline.