Guia definitivo: Como criar e implementar pipelines com Jenkins
O que é o Jenkins ?
Jenkins é uma ferramenta de auxilio a construção de pipelines de construção de software. Com ele podemos automatizar toda as etapas de compilação e teste de software base da Integração Contínua (CI).
O que é Integração Contínua ?
Trata-se de implementações e alterações contínuas no código utilizando metodologias Ágeis. São empregados elementos como: User-Stories, Unit Tests e QA de forma automatizada, preparando uma nova versão do software para realizar a Entrega ou Implementação Contínua (CD).
Entrega ou Implementação Contínua ?
Conjunto de práticas cujo objetivo é garantir que alterações ou novas versões de software, sejam colocadas no ambiente de produção a qualquer momento.
Entrega – Aguarda confirmação manual.
Implementação – Deploy direto para produção.
Definição de um Pipeline
Para que possamos utilizar os recursos do Jenkins dentro de um pipeline de entrega automatizada de software, primeiramente devemos definir as etapas de construção. É muito importante que o processo de desenvolvimento e entrega de software esteja definida antes da construção do Pipeline, uma técnica de grande auxílio nesse momento é a aplicação de um Mapa de Fluxo de Valor, que tem como objetivo identificar todas as etapas e processos pelo qual seu produto passa desde o requerimento feito pelo cliente até a entrega final.
O Pipeline apresentado acima é um bom começo para implementação do CI/CD. Ele contém as etapas de desenvolvimento, teste, release e deploy. Operação e Monitoramento fazem parte mas vão além da proposta deste post.
Criando Pipeline no Jenkins
Para criarmos um pipeline no Jenkins precisamos adicionar um novo job e defini-lo como Pipeline.
Ao adicionar o novo Job precisamos definir de onde o Jenkins irá buscar nosso arquivo Jenkinsfile. Como uma boa prática, deixamos o Jenkinsfile na raiz do repositório SCM da nossa aplicação. Dessa forma o Pipeline será definido por Projeto. Abaixo um exemplo com um projeto básico de HelloWorld Java utilizando o framework MVC SpringBoot.
Esse é um exemplo de repositório Git no Gitlab, note a presença do Jenkinsfile como parte do projeto.
Agora com o Jenkinsfile em nosso repositório devemos configurar o Job no Jenkins para buscar esse arquivo em nosso SCM. Dentro do Job, na etapa de Pipeline defina como Pipeline Script from SCM, após isso informe o endereço de seu servidor SCM e a credencial de login. Isso será o suficiente para que o Jenkins se autentique no repositório e busque o Jenkinsfile.
Como definir um Jenkinsfile
O arquivo Jenkinsfile é relativamente fácil de se escrever. Ele suporta 3 diferentes formatos: Scripted, Declarative e Groovy. Sendo esse último o mais complexo de se configurar. Os exemplos apresentados aqui utilizam o formato Declarative, por ser um sub-set da linguagem Groovy com recursos simples de definição de pipeline.
Um Pipeline Declarativo segue um definição de blocos sequenciais de execução. Então basicamente deve-se definir quais serão as etapas que o software irá passar, desde o fetch do código no SCM até o deploy em ambientes de desenvolvimento, homologação e produção.
Para começarmos nosso Jenkinsfile devemos definir o bloco de pipeline com a tag pipeline:
pipeline { ... }
Esse bloco delimita a área de construção das etapas, ou stages, de compilação/teste/deploy. Agora precisamos definir em qual agente iremos executar esse pipeline. O Jenkins consegue construir softwares em diferentes localidades, bastando que o agente dele exista na máquina e que se tenha acesso ao ambiente. Com isso podemos criar Pipelines que executa a compilação de um programa em plataformas distintas, como: Linux, BSD, MacOS ou Windows. Para definir o agente utilize a tag agent.
pipeline { agent any ... }
Com o agente definido para any, o Jenkins irá buscar o primeiro ambiente disponível, no caso o Jenkins Master que é a própria máquina caso não tenha adicionado nenhum agente. A partir desse momento devemos especificar nossos stages de construção utilizando a tag stages e stage.
pipeline { agent any ... stages { stage('NOME DO STAGE'){ ... } } }
Importante de se notar que a etapa de stage que será executada está dentro de outro
bloco de nome stages, que é um bloco agrupados de stages. Obrigatoriamente cada stage
deve possuir um bloco de steps, sendo esse onde iremos definir os comandos que a pipeline
irá executar.
pipeline { agent any stages { stage('STAGE 00'){ steps{ echo "Pipeline Usando Jenkinsfile" } } stage('STAGE 01'){ steps{ echo "Pipeline Usando Jenkinsfile" } } } }
Executando o Pipeline
Assim que executarmos a build deste Jenkinsfile teremos a seguinte saída sobre os processo:
Desta forma temos um processo de execução da Pipeline versionado dentro de nosso repositório. Essa foi uma apresentação básica da construção de uma Pipeline com Jenkinsfile, para maior aprofundamento a 4Linux possui um curso de CI/CD, onde o aluno poderá desenvolver um Jenkinsfile integrando com outras ferramentas, como SonarQube, Sonatype Nexus e Wildfly, tendo o próprio Jenkins integrado com Gitlab e desenvolvendo uma pipeline completa como abaixo:
Até o próximo post 🙂
About author
Você pode gostar também
Guia prático: Como usar o Terraform para gerenciar sua infraestrutura na nuvem
Terraform é uma ferramenta de código aberto comumente utilizada para construir, alterar e versionar uma infraestrutura de forma segura e eficiente, através de uma linguagem declarativa. A ferramenta é escrita
Como Implementar a Análise de Qualidade de Código com DevOps e SonarQube
Dentro da ótica do DevOps e de como implementar agilidade com qualidade, temos os testes automatizados como um dos principais pilares para manter a essência do CI (Continuous Integration), porém
Descubra o DevOps: a cultura disruptiva que transforma empresas
Apesar de ser amplamente popular nos dias de hoje, o DevOps ainda é nebuloso para algumas pessoas e empresas que buscam se habituar aos novos conceitos da TI, no entanto