Integração Contínua / Entrega Contínua— Parte 1

Thalyson Rocha
6 min readJul 5, 2019

--

Fonte: https://cloud.google.com/solutions/continuous-integration/
  • Parte 1 — Início
  • Parte 2 — Jenkins Pipeline
  • Parte 3 — Análise Estática de Código
  • Parte 4 — Entrega com Ansible (AWX)

Integração contínua é um processo fundamental para o desenvolvimento de aplicações de qualidade em ambientes ágeis. Com um processo de integração contínua implementado, é possível que os desenvolvedores tenham sempre a última versão de um sistema, com a garantia de que esta versão está funcionando corretamente (e testada). Já o deploy contínuo torna mais fácil a entrega de releases ao cliente (ou clientes) e a ambientes de teste.

Imagine que você faz parte de um time que utiliza o scrum como metodologia de gerenciamento, e foi determinado que seja usado TDD (Test Driven Development) durante o desenvolvimento das funcionalidades. Para controle de código no repositório foi eleito o Git Flow. Diante deste cenário, como organizar o fluxo de desenvolvimento a fim de automatizar os processos (para otimizar o tempo), garantir a integridade da ultima versão do código, e garantir a disponibilidade desta executando no servidor?

Nesta série de artigos será desenvolvido um fluxo de integração contínua e deploy contínuo completo para um ou mais destinos, de uma aplicação node com TypeScript, de forma a atender o cenário descrito acima, de acordo com a imagem abaixo:

Figura 1 — Fluxo de integração

Ferramentas usadas no projeto:

  • Gitlab — Aplicação para controle de código fonte.
  • Jenkins — Servidor open-source de automação de tarefas.
  • Sonarqube — Servidor de inspeção de código, para fins de qualidade.
  • Ansible (AWX) — Ferramenta para automação de tarefas em servidores e grupos de servidores.

Obs.: Para agilizar o processo de instalação das ferramentas e servidores, será usado o Docker. Apesar de ser possível fazer toda a instalação dos servidores localmente, recomendo que possua conhecimento básico de docker (e docker-compose) para acompanhar este projeto.

Primeiros passos

Para iniciar, precisamos instalar e configurar o GitLab e o Jenkins, criar um repositório para nossa aplicação, e fazer com que haja a comunicação entre estes através de um webhook. Usando o docker-compose.yml abaixo, podemos subir um container de cada serviço.

Execute o compose e aguarde até que os servidores iniciem. Ao acessar http://localhost:1080, chegamos na tela inicial do Gitlab. Nesta tela, devemos escolher uma senha para o usuário padrão (root). Após alterar a senha, podemos logar no servidor.

Figura 2 — Tela de login do Gitlab

Com o login feito, vamos criar o repositório da aplicação. Selecione Create a project e siga as instruções.

Figura 3 — Criar projeto

Agora para as configurações no jenkins. Acesse http://localhost:2080. No primeiro acesso, o sistema pede uma senha inicial. Para obter esta senha, digite, na mesma pasta do docker-compose.yml, o seguinte comando:

cat jenkins/secrets/initialAdminPassword

Copie a senha obtida na caixa de texto, e siga o processo de instalação, selecionando a instalação dos plugins recomendados.

Figura 4 — Tela inicial

Ao finalizar o processo de instalação, você poderá acessar o painel de controle do jenkins.
Obs.: Se depois de finalizar, aparecer só uma tela branca, reinicie o conteiner do jenkins.

Navegue até Manage Jenkins > Manage Plugins e selecione a aba Available. Selecione o plugin GitLab Plugin e clique em Install without restart.

Para que o jenkins possa fazer o clone dos repositórios, é preciso adicionar uma chave SSH. Gere uma chave SSH com o seguinte comando:

docker-compose exec jenkins ssh-keygen

Siga os procedimentos da geração da chave e esta será gerada no caminho “jenkins/.ssh”. Copie o conteúdo da chave privada:

cat jenkins/.ssh/id_rsa

No jenkins, navegue até Credentials, clique na seta ao lado de (global) e clique em Add credential.

Figura 5 — Adicionar credencial Jenkins

Adicione a chave SSH gerada.

Figura 6 — Credencial chave SSH

Com a chave gerada, clique na seta ao lado do nome de seu usuário (neste caso, “root”) e clique em Configure. Clique em Add new token, dê um nome ao token, e clique em Generate. Copie o token gerado.

Figura 7 — Gerar API Token

Na tela inicial do jenkins, clique em New Item para adicionar um novo projeto. Dê um nome ao projeto e selecione o tipo Multibranch Pipeline (será explicado em outro artigo). Ao adicionar, você deverá configurar este projeto.

Figura 8 — Configurações do Projeto Jenkins

Em Branch Sources, clique em Add source e selecione Git. O campo Project Repository é onde fica o endereço do seu repositório no gitlab. o seguinte formato deve ser seguido:

git@{ENDEREÇO_GITLAB}:{USUÁRIO_GITLAB}/{NOME_DO_REPOSITÓRIO}.git

Selecione a credencial criada anteriormente no campo Credentials, marque a opção Discard old items e limite a 5 builds (na segunda caixa de digitação). Salve as configurações.

Com tudo configurado no jenkins, vamos de volta ao Gitlab para finalizar a integração. Clique na seta ao lado do seu ícone de usuário e selecione Settings. Nesta tela será cadastrado a chave pública gerada anteriormente. No diretório do docker-compose.yml, digite o comando e copie a chave:

cat jenkins/.ssh/id_rsa.pub

Cole no campo de chave pública no gitlab e salve.

Figura 9— Chave SSH Gitlab

Navegue até o painel de administrador (a chave inglesa no cabeçalho da página) e selecione a opção Network, conforme a imagem.

Figura 10 — Configuração de rede

Expanda a aba Outbound Requests e marque a opção Allow requests to the local network from hooks and services. Salve esta configuração.

Faça um commit qualquer em seu repositório, como a adição de um Readme.

Figura 11 — Readme Gitlab

Com o commit feito, navegue até as configurações de seu repositório e selecione Integrations. A URL da integração deve ser preenchida no seguinte formato, onde API_TOKEN é o token gerado anteriormente no Jenkins:

http://{USUARIO_JENKINS}:{API_TOKEN}@{ENDEREÇO_JENKINS}/project/{NOME_PROJETO_JENKINS}
Figura 12 —Webhook Gitlab

Desmarque a opção Enable SSL Verification e clique em Add webhook. Com o webhook criado, clique no campo Test ao lado e selecione a opção Push events. Se tudo correu certo, você deve ver uma mensagem azul conforme a imagem:

Figura 13 — Teste webhook

E pronto! Com isso, você tem um ambiente com gitlab e jenkins funcionando e se comunicando corretamente. Mas não acaba aí, aperte o cinto que a viagem ainda é longa 😎

Até a próxima!

--

--