Aplicar um fluxo de trabalho automatizado

Concluído

Nesta unidade, você saberá mais sobre as ferramentas de fluxo de trabalho automatizado e como elas se integram ao Terraform e ao Azure.

Sobre as GitHub Actions

Como gerente de infraestrutura, você precisa que os fluxos de trabalho de build e implantação usem o mesmo controle de versão do seu projeto.

Usando o GitHub Actions, você pode executar um processo de CI/CD (integração contínua e entrega contínua) que esteja vinculado aos repositórios GitHub.

Com o GitHub Actions, você pode compilar, testar e implantar seu código diretamente no GitHub. Você também pode atribuir revisões de código, gerenciar branches e fazer a triagem de problemas.

Componentes do GitHub Actions

Vamos descrever os vários componentes do GitHub Actions, conforme mostrado no seguinte diagrama:

Diagrama que mostra a relação de fluxos de trabalho do GitHub Actions com os respectivos trabalhos, etapas e ações dos componentes.

  • Fluxo de trabalho: disparado por determinados eventos ou atividades, um fluxo de trabalho é uma coleção de trabalhos e etapas que automatizam tarefas de ciclo de vida do desenvolvimento de software.
  • Trabalho: Um conjunto de etapas que são realizadas em um executor.
  • Etapa: uma tarefa que pode executar um ou mais comandos ou ações. Cada etapa é composta por ações individuais que são executadas após a ocorrência de um evento específico, como uma solicitação de pull.
  • Ação: Comandos autônomos que podem ser combinados em etapas. Várias etapas podem ser combinadas para criar um trabalho. Ações individuais são scripts empacotados que automatizam tarefas de desenvolvimento de software. Para criar um fluxo de trabalho, adicione ações a um arquivo YAML no diretório .github/workflows do repositório GitHub.

Uma ação do GitHub do Terraform

A ação hashicorp/setup-terraform configura a CLI do Terraform no fluxo de trabalho do GitHub Actions:

  • Baixando uma versão específica da CLI do Terraform e adicionando-a ao PATH.
  • Definindo o arquivo de configuração da CLI do Terraform com um nome do host e um token da API do Terraform Cloud ou Enterprise.
  • Instalar um script de wrapper para encapsular chamadas posteriores do terraform binário, além de expor o STDOUT, o STDERR e o código de saída como saídas chamadas stdout, stderr e exitcode, respectivamente.

Autenticar o GitHub Actions com o Azure

O Terraform é compatível com várias opções de autenticação usando o Azure:

  • Quando você usar o Terraform de maneira interativa, recomendaremos que você se autentique por meio de uma conta Microsoft.
  • Quando você usar o Terraform por meio do código ou pela automação, recomendaremos que você se autentique por meio de uma entidade de serviço do Azure.

Uma entidade de serviço é uma identidade para uso com aplicativos, serviços hospedados e ferramentas automatizadas a fim de acessar recursos do Azure.

Próximas etapas

Na próxima unidade, configuraremos um projeto de exemplo e usaremos o GitHub Actions com o Terraform para implantá-lo no Azure.

Principais conceitos sobre o novo Azure Pipelines

Vamos conhecer os componentes que formam um pipeline do Azure.

Diagrama dos principais conceitos e componentes do Azure Pipeline.

  • Um gatilho instrui um pipeline a ser executado.
  • Um pipeline é composto por uma ou mais fases. Ele pode ser implantado em um ou mais ambientes.
  • Uma fase é uma forma de organizar o trabalho em um pipeline, sendo que cada fase pode ter um ou mais trabalhos.
  • Cada trabalho é executado em um agente. Um trabalho também pode ser sem agente.
  • Cada agente executa um trabalho que contém uma ou mais etapas.
  • Uma etapa pode ser uma tarefa ou um script e é o menor bloco de construção de um pipeline.
  • Uma tarefa é um script pré-empacotado que executa uma ação, como invocar uma API REST ou publicar um artefato de build.
  • Um artefato é uma coleção de arquivos ou pacotes publicados por uma execução.

Dica

Para obter informações mais detalhadas sobre os diferentes componentes do pipeline e como usá-los, confira os links fornecidos na seção Resumo.

Tarefas do Terraform para o Azure Pipelines

Ao executar comandos que interagem com o Azure, como, plan, apply e destroy, a tarefa usará uma conexão de serviço do Azure para autorizar operações na assinatura de destino. A maneira recomendada de se conectar ao Azure é associar a conexão de serviço a uma entidade de serviço do Azure. Uma entidade de serviço do Azure é uma identidade criada para uso com ferramentas automatizadas a fim de acessar recursos do Azure.

O snippet YAML a seguir usa o provedor azurerm do Terraform do Azure Pipeline. Uma conexão de serviço é especificada por meio da entrada environmentServiceNameAzureRM:

- task: TerraformTaskV1@0
  inputs:
    provider: 'azurerm'
    command: 'apply'
    workingDirectory: $(Build.Repository.LocalPath)/terraform
    backendAzureRmContainerName: 'tfstate'
    backendAzureRmKey: 'tf/terraform.tfstate'
    environmentServiceNameAzureRM: $(serviceConnection)

Dica

Se você usar azurerm como o provedor Terraform do Azure Pipeline, também precisará fornecer uma conexão de serviço e um contêiner de armazenamento para usar com o estado de back-end do Terraform.

Passar parâmetros

Há vários métodos para transmitir parâmetros para comandos do Terraform. As variáveis oferecem uma forma conveniente de inserir os principais bits de dados em várias partes do pipeline.

Você pode definir uma variável para um pipeline de build seguindo estas etapas:

  1. Acesse a página Pipelines, selecione o pipeline apropriado e escolha Editar.
  2. Localize as Variáveis desse pipeline.
  3. Adicione ou atualize a variável.
  4. Para marcar a variável como segredo, selecione Manter este valor secreto.
  5. Salve o pipeline.

Saída do Terraform para variáveis de pipeline

A tarefa TerraformCLI dá suporte à execução do comando output do Terraform. Quando a CLI for executada, as variáveis do pipeline serão criadas com base em cada variável de saída emitida pelo comando terraform output.

Próximas etapas

Na próxima unidade, configuraremos um projeto de exemplo e usaremos o Azure Pipelines com o Terraform para implantá-lo no Azure.