Integração contínua de projeto Java com Jenkins

Integração contínua de projeto Java com Jenkins
francisco.sokol
francisco.sokol

Compartilhe

Há bastante tempo aplicamos e escrevemos sobre integração contínua, uma das práticas mais importantes do desenvolvimento ágil. Através dela, é possível agilizar tarefas demoradas como a compilação de um projeto e a execução dos seus testes automatizados. Com um servidor de integração contínua bem configurado, essas tarefas são executadas a cada mudança no repositório de código e, em caso de erros de compilação ou falhas nos testes automatizados, todos os desenvolvedores são alertados rapidamente. Dessa forma, se o servidor de integração não aponta problemas no projeto, a equipe tem a segurança de que as mudanças no código estão de acordo com a bateria de testes. É também um passo na direção do deploy contínuo.

Nesse post, iremos ensinar como instalar e configurar um projeto simples com testes de unidade no Jenkins, uma versão renovada (e forkada) do Hudson, o servidor de integração contínua que utilizamos aqui na Caelum e um dos mais populares.

O Jenkins é distribuído como um war e portanto pode ser deployado em um servidor de aplicação como o Tomcat ou o Jetty. Nesse post, iremos utilizar o Tomcat e vamos supor que ele já esteja instalado no seu computador. Chamaremos a home do Tomcat de . Você também deve ter o ant instalado no seu computador pois o utilizaremos para compilar o código e executar os testes. Baixe a versão mais recente do Jenkins e coloque no diretório <tomcat>/webpps/. Inicie o servidor de aplicação executando o script <tomcat>/bin/startup.sh. Depois disso, você poderá acessar a interface web do jenkins pela URL http://localhost:8080/jenkins/ no seu navegador.

Para demonstrar a configuração de um projeto novo, iremos utilizar um projeto simples, criado para esse tutorial. Ele possui apenas duas classes bem simples e uma classe de teste com o JUnit. Além disso, o projeto possui um build.xml configurado para compilar o  projeto, executar os testes e gerar um jar. Você pode também ir aplicando todos os passos em seu próprio projeto. Se você ainda não desenvolve com integração contínua, vai poder mudar bastante a forma com que sua equipe desenvolve e receber um feedback contínuo do que está acontecendo.

Como o projeto se encontra em um repositório Git, será necessário instalar um plugin do Git no Jenkins (inicialmente, o Jenkins só suporta CVS e SVN). Para isso, vá até o plugin manager do Jenkins (Manage Jenkins > Manage Plugins) na aba Avaiable, habilite o Git Plugin e clique em Download now and install after restart (pode ser que não exista nenhum plugin disponível na aba Avaiable, nesse caso, vá até a aba Advanced e clique em Check Now para atualizar o repositório de plugins). Depois do término da instalação do plugin, você deverá reiniciar o Jenkins.

Com o plugin instalado, podemos criar uma nova task no Jenkins para compilar e executar os testes do nosso projeto. Clique em New Job, dê um nome a ele, selecione a opção Build a free-style software project e clique em Ok. Você será redirecionado para a página de configurações do projeto.

Na seção Source Code Management, selecione Git e coloque a url pública do repositório (git://github.com/csokol/jenkins-exemplo.git). Em Build Triggers, selecione Poll SCM e no campo Schedule coloque "*/5 * * * *". Essa configuração determina que o Jenkins irá verificar se houve alterações no repositório desde o último build a cada cinco minutos. Se existir alguma, irá atualizar o seu repositório e executar o job.

Nesse projeto temos duas targets principais do ant que queremos executar no Jenkins, uma para executar os testes e outra para gerar um jar do projeto, pronto para ser distribuído. Para configurar a execução dessas targets, selecione a opção Invoke Ant na seção Build e no campo Targets coloque test jar, essas são as targets que executa os testes e gera o jar, respectivamente.

Agora, precisamos configurar as ações que o Jenkins irá executar depois de executar o ant. Caso exista alguma falha nos testes ou na criação do jar, o Jenkins deve notificar a equipe, para isso, na seção Post-build Actions selecione E-mail Notification e adicione os emails que devem ser notificados em caso de falha no build. Além disso, gostaríamos também de guardar o jar gereado pelo ant, para isso, selecione Archive the artifacts e coloque target/*.jar no campo Files to archive. Assim, toda vez que o job for executado, o Jenkins irá disponibilizar o jar para download em sua interface. Clique em Save para salvar as configurações.

Pronto! Agora o projeto está configurado e cada alteração no repositório irá disparar o Job no Jenkins, executando os testes de unidade:

Como nesse momento o Job nunca foi executado, o primeiro irá iniciar automaticamente e você poderá vizualizá-lo no painel do lado esquerdo em Build history. Você também pode inicar o processo manualmente, clicando em Build Now. Com o build finalizado, você pode visualizar sua página de status, onde poderá baixar o jar criado e também examinar o resultado dos testes em Console Output.

O Jenkins oferece muitos outros recursos além dos descritos aqui, ele é capaz de executar diversas tarefas, como colocar deployar um war em um servidor em produção, gerar relatórios de cobertura de testes, calcular métricas sobre o código do projeto, entre outras. Você poderá conhecer essas funcionalidades explorando os plugins disponíveis ou mesmo desenvolvendo o seu.

Veja outros artigos sobre Programação