Automatize seu build para Kubernetes com Gitlab + ECR

Um exemplo prático e algumas dicas :D

João Brito

--

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.

--

--

João Brito
João Brito

Written by João Brito

Blog moved to getup.io/blog - A devops enthusiast. Trying to establish myself in this crazy market that until yesterday called me a sysadmin.

No responses yet