Automatize seu build para Kubernetes com Gitlab + ECR
Um exemplo prático e algumas dicas :D
AUTOMATIZE TUDO — Essa é a maior dica que posso oferecer! Se você tem que fazer uma tarefa uma segunda vez, talvez você tenha perdido a chance de na primeira deixar automatizado.
Escutei essa frase um tempo atrás e levo ela comigo. Se for possível, já deixe automatizado de primeira: você tem a chance de no mínimo aprender um pouco mais sobre automação ou de, na maioria das vezes, não repetir tarefas e ter que errar para redescobrir as pedras que você já tinha superado. Automação não tem fim, falei um pouco sobre isso nesse artigo há um tempo atrás. A automação pode ser simples, um script bash|python ou um elaborado playbook Ansible. Não despreze o tempo investido em automação, ele sempre retorna para você. E com certeza, se você deseja ir para o próximo nível na administração de sistemas, a automação te levará até lá.
Como diz o ditado:
Se você ainda não destruiu um grande número de recursos com sua automação, você provavelmente ainda não está automatizando muito bem :D
Sendo assim, vamos à prática: criar em um repositório no gitlab a automação para fazer build de sua imagem e envia-la para um repositório, que neste caso utilizaremos o ECR, mas poderiam ser outros como o DockerHub ou o Quay.io por exemplo.
Para começar vamos criar um repositório ECR na AWS:
Acesse — https://console.aws.amazon.com/ecr/repositories
Clique em "Criar repositório" e escolha o nome de sua preferência.
Com o ECR em mãos você agora deverá criar um usuário com permissão para poder enviar suas imagens para este repositório.
O usuário deve ser de acesso apenas programático, pois você utilizará as credenciais dele em seu gitlab. E não deve ser um usuário com outras permissões, pois você precisará expor esta chave, lembre-se: Segurança.
A permissão deverá ser assim:
Agora vamos inserir as chaves desta conta no gitlab para ser utilizado pelo pipeline.
Clicando em Settings -> CI/CD em seu projeto no gitlab, eu estou usando como exemplo este aqui, você poderá inserir as credenciais nas variáveis de ambiente, estas podem ficar seguras e ser exportadas apenas na hora de execução.
Tudo certo, agora precisamos do nosso arquivo ".gitlab-ci.yml" :
Nas primeiras linhas usei Variáveis de Ambiente, primeiro para não escrever esse número gigante aí do endereço do registry :D , segundo para exercitar os 12Factor, separando as configurações do código, as variáveis de acesso da aws por exemplo.
As linhas 6 e 7 informam ao gitlab que este seu pipeline deve ser executado em um "runner" que tenha o docker instalado. (dind=docker in docker)
E então chegamos ao "build" finalmente, escolhi usar uma imagem docker, que no caso é Alpine, e começar instalando o CLI da aws que será necessário para me logar e enviar a imagem para o ECR.
Para quem nunca executou um pipeline no gitlab, deve estar pensando como iniciá-lo, e já lhe digo: basta fazer push deste arquivo e já vai rodar.
Você poderá acompanhar a execução deste pipeline no painel do gitlab e deverá mostrar uma tela similar a esta:
Claro que sem tantos erros, por que eu testei bastante antes de chegar nesse exemplo simples e funcional :D
Agora você já pode utilizar esta imagem no deploy em seu kubernetes favorito e, quem sabe, faremos uma parte 2 mostrando o deploy também automatizado.
Até a próxima, e não deixe de nos seguir no Twitter para novas informações e ouça também o Kubicast, o podcast sobre containers e kubernetes.