Olá Pessoal, no post de hoje vamos ver como integrar maven + jenkis + git. É algo aparentemente simples, mas que na primeira vez me deu umas dores de cabeças chatas até deixar tudo redondo e resolvi compartilhar com vocês.
Lets go…
O problema
Sempre temos que ter um problema para que o nosso dia fique mais emocionante. Então eu tinha alguns:
- Queria montar um ambiente automatizado com o jenkins ;
- Queria conectar o jenkins com o git;
- Queria fazer meu jenkins buildar pelo maven ;
- Não ter um Java Project apenas;
- Não queria ter mais de um repositório no Git, ou seja, nada de um repositório por projeto.
Bem, do problema 1 ao 3 eu já tinha resolvido facilmente, mas os pontos 4 e 5 estavam me incomodando, porque eu queria ter mais de um projeto para ter as coisas organizadas e melhor para trabalhar, sem falar que a manutenção fica mais fácil. Também há outro fator, eu sou preguiçoso para coisas repetitivas, odeio ter que fazer mais de uma vez o mesmo trabalho. Gosto de fazer o trabalho chato uma vez e se precisar mudar algo amanhã, que o esforço seja o mínimo possível.
A solução
Após horas de tentativas de montar a estrutura ideal que queria, cheguei a uma que atendeu ao que precisava, ou seja, atingi os 5 pontos citados anteriormente. Como? Simples assim:
- Repositório: crie um repositório git, que aqui chamei de trunk
- Parent: crie um maven Project chamado parent. Nele vou colocar as dependências base e comum nos projetos. Adicionei os outros projetos como module do projeto parent.
- Filho 1: criei um Project maven chamado readers-core que será um projeto focado apenas no back-end da aplicação.
- Filho 2 : criei um Project maven com suporte JSF que será focado na parte de front-end, porém esse projeto tem uma dependência do projeto filho 1 (readers-core).
Cada projeto tem seu próprio pom.xml, isso evita de ter um pom.xml com tudo e sabemos que quando a configuração de XML começa a crescer é um inferno pra ficar dando manutenção e se achar nele. Daí cada projeto terá no seu pom.xml aquilo que ele precisa de fato, por exemplo, o projeto ereaders-core não precisa ter uma dependência JSF definida no pom.xml, porque esse é um projeto que não foca em front-end.
A estrutura ficou assim
–meu repositório git
–parent-project maven
–projeto Java A
–projeto Java B
Na prática
Bem, não vou explicar como instalar o jenkins na máquina, nem o Git.No blog há posts relacionados nas devidas sessões.
- Crie um repositório Git (O meu chamei de trunk.)
- Criando o projeto parent
Esse cara aqui é o mais importante, pois é pra ele que vamos apontar o Jenkins. Portanto, crie um maven Project:
** Você vai precisar ter o Jboss Tools instalado Plugin instalado na sua IDE Eclipse.
No próximo passo
Observe que criei uma pasta chamada parent-project dentro de trunk. Faça isso.
No ultimo passo, deixe conforme a imagem a seguir:
Agora crie dois maven project, porém no segundo passo deixe assim:
** o package você decide. Eu criei um .jar para o projeto core e .war para o projeto web.
No meu caso:
Abra o arquivo pom.xml do parent-project e adicione os dois outros projetos como modules:
Abra o pom.xml de um dos projetos que você criou (no meu caso ereaders-core.) e em parent deixe assim:
Faça o mesmo para o outro projeto.
Para projetos Web
Se você criou um projeto web, terá que alterar seu pom.xml conforme a seguir. No meu caso, criei um maven project e depois adicionei “capacidades de JSF”, isso porque o Jboss tools nos permite fazer isso. Daí a estrutura do projeto fica assim.
Nós precisamos informar ao maven onde está o web.xml para que ele possa gerar o .war.
Para isso, clique com o botão direito no pom.xml do projeto web e vá na opção maven >> add plugin. Na janela que aparece, informe o seguinte:
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
Feito isso, vá no modo de edição do pom.xml e adicione o código abaixo:
<configuration>
<webXml>..\readers-web\WebContent\WEB-INF\web.xml</webXml>
</configuration>
O código completo:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>..\readers-web\WebContent\WEB-INF\web.xml</webXml>
</configuration>
</plugin>
Se não fizesse, o seu build ia falhar, porque ele não ia saber o caminho do web.xml. Por default o maven ia procurar em seuprojeto\ WEB-INF.
Alterando a versão do Java no maven
Se você estiver usando um projeto web com suporte servlet 3.0 é requerido Java 6, mas o maven por default usa Java 5. Para alterar basta adicionar o plugin no pom.xml do projeto web:
groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
E depois editar adicionando as informações a seguir:
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
Feito isso podemos buildar nosso projeto dentro do eclipse e ver o que acontece, portanto clique com o botão direito no parent-project, vá em Run As >> Maven Install
O resultado final deve ser conforme a imagem acima. Simples, não? Agora foi, mas antes disso tive problemas chatos. Um deles foi esse do .war.
No Jenkins
Agora vamos para o Jenkins e criar um job para buildar esse projeto
O meu chamei de parent-project e escolher a opção maven.
As configurações são bem simples, a mais chata foi a do build, como veremos a seguir. Como estou usando o Git, então informei onde está o repositório:
E no build configurei:
Salve as alterações e clique em Build Now
E o resultado é o build construído.
Bom, essa foi uma das soluções que achei mais viável para o meu projeto. Espero que tenha gostado.
Compartilhe sua experiência… como tem feito?
Abraços, see ya!