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.
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.