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

Entenda o Git: O que é, como funciona e como começar a usar

GIT? O que é? Git é um sistema de controle de versões distribuído, ou seja, ele não precisa de um servidor central para funcionar. É uma ferramenta open source, criada

Notícias

Seja o melhor aluno e garanta sua contratação na 4Linux

A 4Linux escolherá 20 pessoas para realizarem gratuitamente seus cursos Devops e garante contratar o melhor aluno, venha para o caça talentos Devops. Quem pode participar? Poderá participar todas as

DevOps

Guia completo: Como automatizar a coleta de dados na web com Python e Selenium

Muita gente na internet tem dúvida de como fazer robôs que buscam coisas em sites, baixam conteúdo ou simplesmente executam ações para testar alguma funcionalidade do site, sistema ou algo