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.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

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

Write a response

Recommended from Medium

Lists

See more recommendations