Gerenciando repositórios no Github "como código" com Terraform — Parte 1

Bruna Pereira
4 min readApr 11, 2021
fonte: https://bit.ly/3wFysEC

No mundo do desenvolvimento de software, estamos na era em que tudo é definido, escrito e controlado em código. Everything as Code agora é um conceito!

Existem muitos benefícios em manter em código tarefas que seriam feitas manualmente, dentre eles: manter histórico de mudanças, decentralizar tarefas, diminuir erros humanos, documentar e talvez o mais importante de todos: automatizar.

Neste artigo, vou mostrar como você pode fazer o gerenciamento dos repositórios do Github usando Terraform. Mas antes, vou explicar as motivações por trás dessa abordagem.

1. Garantir um padrão de regras entre repositórios no time/na organização.

Eu vejo que é bem comum existirem alguns padrões que atravessam vários repositórios, como por exemplo o uso de Pull Request para fazer o merge na master. Outro caso comum é ter que adicionar grupos específicos como administradores de todos os repositórios. Dentre outras diversas configurações que precisam ser feitas manualmente.

2. Ter documentações

Às vezes me pego buscando donos de repositórios que precisam fazer uma mudança em específico. Muitas vezes nos resta contar com a documentação no README, ou adivinhar baseado nos acessos permitidos ao repositório.

3. Manter histórico

Para contextos mais críticos que requerem um rastreamento sobre mudanças, ter todas as mudanças em código e versionadas no Git podem ser de grande ajuda.

4. Praticidade (!)

Ninguém precisa fazer o mesmo trabalho inúmeras vezes! Configurar acessos, membros, permissão de escrita, branch padrão, esquemas de pull request, passos a rodar no Github Actions (ou outra ferramenta de CI), entre outras inúmeras tarefas que você vai esquecer de fazer eventualmente.

Estando ainda mais claros os objetivos de automatizar tarefas repetitivas, vamos ao código.

Observação: esse artigo assume que você tenha ao menos uma familiaridade com Terraform.

Antes de começar, garanta que você tem o Terraform instalado. Todo o código que vai ser mostrado aqui foi escrito usando a versão v.0.14.

Set-up

Para que seja possível fazer alterações no Github, será necessário criar um API Token e para rodar o comando, o token será buscado automaticamente na variável $GITHUB_TOKEN no bash. Garanta que você gerou o token e exportou ele para a variável correta.

Para fins de teste deste artigo, eu criei uma organização no Github no pacote gratuito. Se você estiver seguindo esse artigo à risca, sugiro que faça o mesmo.

Iniciando o projeto

Crie uma pasta para o projeto, e o primeiros passos são instalar o provider do Github e especificar em que organização este projeto será executado. Crie um arquivo na raiz do projeto chamado providers.tf com o seguinte conteúdo.

  • owner: nome da organização do Github na qual os comandos serão executados.
  • required_providers: especificação de quais providers e em qual versão gostaríamos que fosse instalada.

Após criar o arquivo, inicialize o projeto e baixe as dependências a partir do comando terraform init.

Criando times

O primeiro trabalho será criar diferentes times dentro da organização, para que o gerenciamento de acesso a cada repositório seja mais fácil. Na minha organização, eu irei criar um time de engineers.

Tudo que está relacionado a times, vou organizar dentro de um módulo único, em que irei chamar de team. O módulo então será composto de duas partes:

  • A definição do módulo em si, que estará no arquivo main.tf na raiz do projeto:
  • A definição do resource, que estará também num arquivo main.tf na pasta que contém o mesmo nome do módulo.
  • O resource github_team é responsável por criar times dentro de organizações. Para descobrir quais resources estão disponíveis para você e quais parâmetros devemos informar, basta acessar a documentação oficial.

Executando o script

Neste ponto você já tem tudo que precisa para executar o script. Siga os seguintes passos:

  1. terraform init mais uma vez, já que um módulo novo foi criado.
  2. terraform plan -out=plan.out para identificar o que vai ser criado.
  3. terraform apply plan.out para aplicar de fato as mudanças.

Se tudo ocorreu com sucesso, o plan deve conter uma mudança, parecida com esta:

E ao rodar o apply, se tudo estiver configurado corretamente, você deverá ver a seguinte mensagem: Apply complete! Resources: 1 added, 0 changed, 0 destroyed. E se você agora checar a sua organização do Github, irá perceber que de fato tem um time criado lá!

Se você chegou até aqui, parabéns, você criou o seu primeiro script para gerenciamento de repositórios do Github! 🎉🎉

Para não prolongar a leitura, irei descrever próximos passos em um segundo artigo. E se você estiver ansiosa ou ansioso demais, sugiro desbravar a documentação e já partir pra próxima automação. 😄

Acesse aqui a parte 2 do tutorial!

--

--