06/09/2017 Larissa Bonifácio Roder

A importância da Integração Contínua, utilizando Jenkins e SonarQube

concept of DevOps, illustrates software delivery automation through collaboration and communication between software development and information technology operations  in agile development process

Produzir software de qualidade é uma tarefa difícil, que exige um constante monitoramento para mantê-lo íntegro.

A integração contínua é uma técnica de desenvolvimento que busca diagnosticar os bugs (defeitos) e problemas de integração mais rapidamente, utilizando um repositório de código único e executando o build (construção) do software diariamente.

 

Qual o principal ganho nos projetos com a Integração Contínua?

Imagine vários desenvolvedores codificando módulos de um mesmo projeto, é natural que colisões de código possam surgir. É bem provável que, em algum momento, um desses módulos seja alterado, simultaneamente, por dois ou mais desenvolvedores ocasionando problemas

A integração contínua atua exatamente antecipando tais situações, permitindo que o time reaja imediatamente e garanta uma evolução muito mais segura do produto. Afinal, “é melhor prevenir que remediar”’.

Jenkins

É uma ferramenta de integração contínua, automatizada, que traz diversos benefícios. A principal funcionalidade dela é construir o projeto por completo de forma automática, rodando os testes disponíveis, a fim de detectar antecipadamente os erros, reduzindo riscos.

SonarQube

O SonarQube é um projeto open source que visa justamente isso: Avaliar a qualidade de seu código. Para isso ele utiliza um conjunto de ferramentas que analisa a arquitetura e design, número de comentários, regras de linguagem, nível de complexidade, código duplicado, cobertura de testes no código, etc. Além de possuir um número bastante extenso de plugins. Com base nessas informações disponibiliza números que indicam a qualidade do código, e disponibiliza um dashboard e alertas para facilitar a visualização e identificação dos problemas.

Configurando o ambiente

Será demonstrado um passo a passo para a configuração de um ambiente integrando Jenkins e SonarQube. A instalação para a execução dos exemplos foi feita via container, no caso o Docker.

Arquivo Docker Compose

O arquivo a seguir mostra a configuração necessária para o funcionamento do Jenkins e o SonarQube. Como podemos perceber, o SonarQube utiliza as configurações do PostgreSQL e o Jenkins utiliza as configurações do SonarQube.

como configurar SonarQube

Configurando o Jenkins:

Como configurar Jenkins

Configuração do job mostrado na imagem anterior:

  1. Navegar até o campo Pipeline.
  2. Em “Definition”, selecionar “Pipeline script from SCM” (essa opção utiliza o Jenkinsfile contido no repositório).
  3. Em SCM, selecionar “Git“.
    1. Em “Repositories”, vamos informar a URL do repositório em “Repository URL” e informar as credenciais em “Credentials“.
    2. Em “Branches to build”, vamos informar a branch desejada em “Branch Specifier“.
  4. Em Script Path, vamos informar o nome do nosso “JenkinsfileTest” que, neste caso, será Jenkinsfile

 

Criando o Jenkinsfile do projeto:

O arquivo Jenkinsfile é um node, onde configura-se vários stages, como podemos verificar na próxima imagem:

Como criar Jenkinsfile

Um stage é cada etapa que será executada no Jenkins quando solicitamos a construção de um build.

  • O “stage” chamado “Checkout SCM” indica que o Jenkinsfile foi criado com suporte para multibranch;
  • O “stage Build”, indica que estamos gerando os artefatos necessários para deploy do sistema, no exemplo utilizamos um projeto Maven;
  • O “stage Sonar”, é a etapa onde o código é escaneado pelo SonarQube, que este de acordo com as regras configuradas determina quais os pontos podem ser melhorados.

A imagem mostra os stages executados pelo Jenkins

Stages criados pelo Jenkins

Configurando o SonarQube

Para configurar as regras no sonar basta acessar o menu administration -> System -> Update Center, como é mostrado na imagem abaixo.

Como configurar regras SonarQube

E efetuar o download das regras que desejar de acordo com a linguagem utilizada.

Como SonarQube linguagens

Independente da arquitetura do projeto e quantidade de ambientes, a geração de builds pode se tornar um desafio enorme. Por isso, a integração contínua com ferramentas automatizadas reduz erros do trabalho em equipe e aumenta a produtividade da equipe.

 

Referências

http://www.devmedia.com.br/integracao-continua-uma-introducao-ao-assunto/28002

http://blog.caelum.com.br/integracao-continua-de-projeto-java-com-jenkins/

https://jenkins.io/

https://www.sonarqube.org/

 

Tagged: , , , , ,

Sobre o autor

Larissa Bonifácio Roder Larissa Roder é Desenvolvedora Java há quase três anos, Mestranda em Computação Aplicada pela UTFPR de Cornélio Procópio e possui certificação OCAJ7.