Olá, pessoal!
No artigo de hoje vamos ver como integrar maven + jenkis + git. É algo aparentemente simples, mas que na primeira vez me deu umas dores de cabeça até deixar tudo redondo. Então, resolvi compartilhar minha experiência com vocês.
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 ter uma melhor forma 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: criei um repositório git, que aqui chamei de trunk;
- Parent: criei um maven Project chamado parent. Nele coloquei 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. Então, 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.
- 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 último passo, deixe conforme a imagem a seguir:
<img mavenconfigureproject>
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.
<img readersweb>
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:
[xml]
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>[/xml]
Feito isso, vá no modo de edição do pom.xml e adicione o código abaixo:
[xml]
<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>[/xml]
Se não o fizer, o seu build vai falhar, porque ele não saberá o caminho do web.xml. Por default, o maven vai 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:
[xml]
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>[/xml]
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 escolhi 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!