Integração Automatizada com Git e Maven no Jenkins

O Jenkins é uma ferramenta de integração contínua de código aberto amplamente utilizada para automatizar processos de compilação, testes e implantação. Com o crescimento do número de servidores e projetos, sua eficiência torna-se evidente ao reduzir tarefas manuais e aumentar a confiabilidade do pipeline de entrega.

Neste cenário, os repositórios são geridos pelo Git e as dependências do projeto são organizadas com o Maven, especialmente em projetos multi-módulo. O objetivo deste guia é demonstrar como configurar um pipeline automatizado no Jenkins para sincronizar mudanças no Git, compilar com Maven e implantar automaticamente em um servidor Tomcat.

1. Instalação do Jenkins

Acesse o site oficial http://jenkins-ci.org/ para baixar a versão mais recente (atualmente 1.629). O pacote principal é um arquivo .war, que pode ser executado diretamente em servidores Java como o Tomcat.

Certifique-se de que o Tomcat está configurado corretamente:

  • Verifique se unpackWARs e autoDeploy estão habilitados no arquivo server.xml.
  • Caso não funcione, considere instalar via pacotes .deb ou .rpm, embora seja mais complexo.

2. Instalação de Plugins Essenciais

Copie o arquivo jenkins.war para o diretório webapps do Tomcat e inicie o servidor. Acesse http://SERVER_PATH:8080/jenkins.

Para integrar com Git, é necessário instalar o plugin Git:

  • Vá em Manage Jenkins > Manage Plugins.
  • Na aba Available, procure por "Git Plugin" na categoria Source Code Management.
  • Instale e reinicie o Jenkins após a conclusão.

Plugins como Maven já vêm pré-instalados, mas verifique se estão ativos.

3. Configuração de Ambiente (JDK e Maven)

Acesse Configure System para definir caminhos críticos:

  • Configure o caminho do JDK (evite deixar o Jenkins instalar automaticamente — é muito lento).
  • Defina o local da instalação do Maven (ex: /opt/maven).
  • O diretório raiz do Jenkins é por padrão ~/.jenkins. Altere se necessário.

O caminho padrão para acessar jobs é: http://SERVER_PATH:8080/jenkins/job/{nome_do_job}/

4. Criação de um Job com Git e Maven

Crie um novo job selecionando Maven Project.

No painel de configuração:

  • Em Source Code Management, escolha Git e insira o URL do repositório: https://github.com/bingyue/easy-springmvc-maven
  • Forneça credenciais de acesso (usuário e token, preferencialmente).

Defina o Build Triggers como "Poll SCM" para verificar mudanças periodicamante, ou use "Build whenever a SNAPSHOT dependency is built".

Na seção Build, defina:

  • Root POM: pom.xml
  • Goals and options: clean package (para garantir uma compilação limpa)

Exemplo do pom.xml relevante:

<groupId>springmvc-maven</groupId>
<artifactId>easy-springmvc-maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<build>
  <finalName>easy-springmvc-maven</finalName>
  <plugins>
    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.1</version>
      <configuration>
        <source>1.6</source>
        <target>1.6</target>
      </configuration>
    </plugin>
    <plugin>
      <artifactId>maven-war-plugin</artifactId>
      <version>3.0</version>
    </plugin>
  </plugins>
</build>

5. Automatização de Implantação com Shell Script

Em Post-build Actions, adicione um comando Execute shell para realizar a implantação:

#!/bin/bash

# Parâmetros
TOMCAT_HOME="/usr/local/tomcat2"
APP_NAME="easy-springmvc-maven"
WAR_FILE="easy-springmvc-maven.war"
PORT=8082
WORKSPACE_DIR="/home/bingyue/.jenkins/jobs/jeekins-test/workspace/target"

# Data atual
NOW=$(date +"%Y%m%d%H%M%S")
echo "Execução iniciada às: $NOW"

# Encerrar processo anterior do Tomcat
PID=$(lsof -t -i :$PORT -n | head -1)
if [ ! -z "$PID" ]; then
    kill -9 $PID
    echo "Processo do Tomcat encerrado (PID: $PID)"
else
    echo "Nenhum processo encontrado na porta $PORT"
fi

# Limpar diretórios antigos
rm -f "$TOMCAT_HOME/webapps/$WAR_FILE"
rm -rf "$TOMCAT_HOME/webapps/$APP_NAME"

# Copiar novo WAR
if [ -f "$WORKSPACE_DIR/$WAR_FILE" ]; then
    cp "$WORKSPACE_DIR/$WAR_FILE" "$TOMCAT_HOME/webapps/"
    echo "Novo WAR copiado para $TOMCAT_HOME/webapps/"
else
    echo "Erro: Arquivo $WAR_FILE não encontrado em $WORKSPACE_DIR"
    exit 1
fi

# Iniciar Tomcat novamente
export JAVA_HOME="/data/jdk7"
export CATALINA_HOME="$TOMCAT_HOME"
export CATALINA_BASE="$TOMCAT_HOME"

"$TOMCAT_HOME/bin/startup.sh"
echo "Servidor reiniciado com sucesso"

⚠️ Observação: Este script assume um ambiente com dois servidores Tomcat rodando em portas diferentes. Em produção, o Jenkins geralmente executa em um nó central e realiza implantações remotas via SSH ou API.

6. Execução do Build

Acesse o job criado e clique em Build Now. O status aparecerá na interface principal:

  • Verde: build bem-sucedido
  • Vermelho: falha

Verifique os logs no console para diagnóstico. Após sucesso, o WAR gerado estará disponível em: http://SERVER_PATH:8080/jenkins/job/jeekins-test/ws/target/easy-springmvc-maven.war

Acesse o Tomcat destino (http://localhost:8082/easy-springmvc-maven) para validar a implantação.

7. Problemas Comuns e Soluções

  • Erro "Invalid or unreadable WAR file": Indica que o arquivo foi corrompido durante download. Verifique o tamanho do jenkins.war (~60MB) e rebaixe-o.
  • Problema de codificação UTF-8 no Tomcat: Erro: *"Your container doesn’t use UTF-8 to decode URLs"*Correção: Edite server.xml e adicione:
<Connector port="8080" URIEncoding="UTF-8" />

  • Falha no envio de e-mails: Erro: *"Could not connect to SMTP host: localhost, port: 25"*Solução: Configure um servidor SMTP externo (como Gmail) nas configurações de email do Jenkins.

Tags: Jenkins Git maven CI/CD automation

Publicado em 9-11 08:54