Simples CI/CD pipeline com Jenkins, Docker Swarm e Github — Parte 2

Na primeira parte foi dado um contexto geral do que é um CI/CD.
Se você não leu, não perca tempo e clique aqui :D

Vamos iniciar nossa implementação de um simples CI/CD

Para um pequeno exemplo, vamos fazer uma implementação de um CI/CD. Para esse example vamos considerar somente as seguintes informações.

  • Jenkins já está instalado;
  • Docker já está instalado;
  • Vamos usar somente as branchs “master” e uma “dev”;
  • Não vamos usar staging;
  • Vamos usar um ambiente de homologação e um de produção;

Projeto de exemplo

Vamos usar o projeto de exemplo que está no Github. https://github.com/marcelosv/cicdproject

Contexto: webhook

Um webhook em desenvolvimento Web é um método de ampliar ou alterar o comportamento de uma página da Web, ou aplicação da Web, com callbacks personalizados. Wikipédia

Configuração inicial — NGROK

A primeira coisa que precisamos fazer é configurar o Jenkins para comunicar com o Github.

A comunicação entre Github e Jenkins é feito por webhook. Essa comunicação que faz com que, quando comitar algum arquivo em alguma branch, automaticamente rode algum job no Jenkins.

Povavelmente deve ter se perguntado. “Eu estou usando um Jenkins interno, como que o Github vai achar meu IP?”.

Para resolver isso, estou usando o: https://dashboard.ngrok.com/.
Este projeto é para criar um webhook tunnel para que o Github consiga achar o Jenkins.

Basta seguir os passos no próprio site.

======================

Quer fazer um curso específico de CI/CD?

Curso: Microservice, RESTAPI, CI/CD, Deploy, LoadBalancer e Monitor

** Conceitos do curso:

1. Devops (CI/CD)
2. Comunicação síncrona com RestAPI;
3. Load Balancer — Balanceamento de carga;
4. Monitoramento;
5. Virtualização com Docker;
6. Pipeline;
7. Cluster

Entre no site www.alcateiadev.com.br e lá tem cupons de desconto semanal.

=========

Configuração inicial — Jenkins

No Jenkins, entrar em “Gerenciar Jenkins” -> “Configurar o Sistema”.
Configurar o Jenkins Location para poder adicionar o DNS que o ngrok disponibiliza.

No item Jenkins é preciso agora configurar o GitHub. Primeiro passo é criar no Github um “Personal access tokens” e depois configurar o Github Server, criando uma credencial do tipo “Secret text” e no campo ID informando o token.

Criando uma pipeline para nosso ambiente de homologação

Primeiro passo, vamos criar um job no Jenkins. Para isso escolha o nome CI — CD — Pipeline Homologação e selecione a opção Pipeline.

Na opção GitHub project, adicione o link igual a imagem abaixo:

Selecione a opção GitHub hook trigger for GITScm polling. Esta opção vai fazer o webhook com o git funcionar.

Na opção Pipeline, selecione Pipeline script.

Neste passo iremos configurar nossa pipeline para poder executar sempre que um commit na branch dev for feito.

Adicione a pipeline da imagem abaixo:

É importante explicar cada stage.

  • Clone:
    É o stage que faz o clone do projeto do github, configura o maven e cria uma variável, com os dados do log do git, para gerar automaticamente um número de versão.
  • Test
    Executa o comando do maven para executar os testes.
  • Install
    Executa o install do maven e gera o arquivo .jar.
  • Docker build
    Compila a imagem em docker.
  • Deploy
    Faz o deploy no docker swarm.

É importante executar manualmente a primeira vez o job. Depois você vai ver uma tela parecida com essa.

E agora, para fazer se está funcionando?

Execute o comando:

e o resultado deve ser este.

Criando uma pipeline para nosso ambiente de produção

Vamos lá, você consegue. Segue os passos para criarmos o ambiente de produção.

  • Criar um novo job com o nome CI-CD — Pipeline — Produção. No final da janela tem o campo Copy from. Digite o nome do job anterior, e clique em OK. A opção de Copy from vai criar um job nome copiando o job anterior;
  • Na pipeline, stage Clone, troque dev pela master.
  • Na pipeline, tage Docker build, altere o ci-cd-project-homolog para ci-cd-project-producao;
  • Na pipeline, stage Deploy, altere o homolog.yml para producao.yml;
  • Na pipeline, stage Deploy, altere o cicd-homolog para cicd-producao;

Agora execute o comando abaixo e veja o resultado.

Resumo

Chegar na maturidade onde o time possa executar um CI/CD sem ambiente de homologação e que atualiza diretamente a produção, requer tempo, um time cascudo e muitos experimentos, mas isso não quer dizer que não possamos criar um simple CI/CD, que ja vai ajudar no dia a dia e que vai ajudar o time a ter a experiencia.

--

--

Marcelo de Souza Vieira
;) -> Java e Arquitetura de Forma Mastigada |;)

CTO at Sellers. I work since 2004 with Java and a passion for the profession. I am enthusiastic about Open Source projects.