Criando Pipelines no Jenkins com Jenkinsfile

Criando Pipelines no Jenkins com Jenkinsfile

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 Ansible Vault: Criptografando Playbooks e Variáveis
Próxima Por que fazer um Curso de Linux Online?

About author

Julio Ballot
Julio Ballot 4 posts

Júlio Rangel Ballot atua como Analista de Infraestrutura 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á 10 anos ná area de Tecnologia da Informação. Detém expertise como instrutor de cursos voltados ao Sistema Operacional Linux, sendo certificado LPIC-1 e Exin DevOps Master.

View all posts by this author →

Você pode gostar também

Desenvolvimento

Git: Adicione ciclos de vida aos seus arquivos

Git é um versionador de código fonte fácil de usar, isso quase todos sabem, entretanto sua experiência de uso pode ser bem confusa em alguns casos. Convido-os a uma breve

Treinamentos

4Linux lança curso de DevSecOps e solidifica liderança em cursos para carreira DevOps

Treinamento possui conteúdo único em relação a qualquer outro no mercado A 4Linux anuncia hoje o lançamento de mais um curso para enriquecer a sua oferta de treinamentos na carreira

Infraestrutura

Curso MongoDB Presencial em São Paulo | 4Linux

Bancos de dados são a base dos projetos de desenvolvimento Web. Muitos desenvolvedores estão voltando sua atenção para o MongoDB, um banco de dados sem esquema que é popular para uma