Guia definitivo: Como criar e implementar pipelines com Jenkins

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 🙂

CURSOSCONSULTORIA    CONTATO

Anterior Proteja sua infraestrutura com Ansible Vault: segurança e simplicidade
Próxima Domine o Linux: Curso Online Completo e Atualizado!

About author

Julio Ballot
Julio Ballot 8 posts

Júlio Rangel Ballot, atua como Consultor de TI em Software Livre, formado em Engenharia de Computação pela Universidade de Taubaté. Possui experiência em Administração de Sistemas Open Source e ferramentas voltadas a práticas DevOps, com ênfase em CI/CD (Continuous Integration / Continuous Delivery), atuando há 13 anos na área de Tecnologia da Informação. Detém expertise como instrutor de cursos voltados ao Sistema Operacional Linux, sendo certificado LPIC-2, LPIC - DevOps Tools Engineer, Exin DevOps Master e MongoDB Administrator.

View all posts by this author →

Você pode gostar também

Infraestrutura TI

Aprenda a criar módulos com Terraform na prática

Este seria o último capítulo da nossa série de postagens sobre Terraform, mas se podemos também falar sobre versionamento de infraestrutura, acho que vale a pena no aprofundarmos em mais

Banco de Dados

Crie sua própria Wiki: Guia passo a passo para instalação e uso

Uma wiki é uma coleção de páginas da web interconectadas e editáveis colaborativamente. O termo “wiki” é derivado da palavra havaiana “wiki wiki”, que significa “rápido” ou “veloz”. A característica

DevOps

Participe do Beta Test da nova certificação DEVOPS do LPI

O Linux e o mundo open source estão em constante evolução e o LPI trabalha arduamente para garantir que os seus exames de certificação reflitam os mais recentes avanços na