Anexar um projeto em Java no Jenkins é relativamente fácil pois como o Jenkins foi feito em Java, ele é capaz de entender logo de cara as configurações do seu projeto, como o uso do maven para gestão de dependências por exemplo.
Configuração
Antes de criar jobs no Jenkins para executar builds, teste e deploy de projetos Spring Java no Jenkins é necessário configurar alguns itens.
Compilador Java
O Jenkins precisa de acesso a um compilador Java parque que possa construir os projetos. Existem duas formas básicas de se linkar compiladores java ao Jenkins:
- Instalar o compilador java globalmente, configurar a variável de ambiente e colocar o seu valor nas configurações globais do Jenkins.
- Fazer o Jenkis baixar e instalar uma versão do compilador e utiliza-la "out of the box".
Existem vantagens e desvantagens nas duas abordagens. A primeira técnica possibilita a configuração de um único compilador que pode ser reutilziado para executar todos os jobs do seu projeto java. Como é necessário que o Jenkins tenha o java instalado na máquina para funcionar é bem provável que você já vai ter um java funcionando e configurando na sua máquina. Então, fazer o jenkins utilizar este compilador é tarefa fácil. Existe uma outra vantagem também que é em relação ao espaço utilizado. Nesta abordagem um único compilador pode atender todos os jobs java no seu servidor de integração contínua. Como nem tudo são flores as desvantagens desta técnica são: Configurações muito pouco flexíveis, todos os jobs irão rodar sob uma versão específica do compilador. Se atualizar o compilador da máquina todos os jobs serão afetados. Além de criar um grande acoplamento das configurações do Jenkins com o ambiente da máquina.
A segunda técnica oferece mais flexibilidade e baixo acomplamento. Pode-se instalar vários compiladores diferentes e correr testes em diferentes versões do java. Isto também torna o Jenkins mais independente do estado da máquina. Pois as versões do compilador são gerenciadas pelo servidor de integração contínua. O ponto negativo de se usar esta abordagem é que o espaço consumido para se ter diversos compilaores no servidor pode não ser atrativo. Outro problema também é que se o Jenkins possui mais de um compilador instalado, isto significa configurar qual versão se deseja utilizar a cada job criado no servidor.
Esta questão de compilador universal versus compilador gerenciado pelo Jenkins não se restringe apenas ao mundo Java, mas sim a qualquer tecnologia. (Engines Javascript, Interpretadores Ruby, compiladores C e assim por diante).
Para configurar um compilador Java gerenciado pelo Jenkins você deve estar logado como administrador e entrar em:
Manage Jenkins -> Global Tool Configuration -> JDK Instalations
- Defina um nome para o compilador. Este nome será utilizado para referenciá-lo quando você criar o seus jobs.
- Deixe selecionado a opção "Install automatically" e selecione a versão que deseja baixar.
- Note que para utilizar esta opção você deve aceitar os termos e condições de uso do Java SE, além de fornecer as credenciais da sua conta oracle parque o Jenkins possa baixar a versão do compilador desejada.
- Caso não tenha uma conta Oracle, você pode criar uma gratuitamente no site da empresa.
A figura abaixo ilustra o processo:
Para configurar um compilador gerenciado pela máquina(compilador único) o processo é similar conforme a figura abaixo:
Observe que a única diferença neste caso é que em vez de marcar a opção "install automatically" você deve apontar o PATH
do binário do javac
para que o usuário Jenkins possa chamá-lo no seu shell interno quando for dar build no job.
Maven
O Apache Maven é um gerenciador de dependências muito útil para projetos escritos em java. Com ele você pode especificar as bibliotecas que constituem as dependências de seu projeto e ele faz o gerenciamento das mesmas. O maven acessa o repositório, baixa as dependências e a disponibiliza para seu projeto. Além disso, ele armazena as dependências em um diretório central na máquina para que caso um outro projeto venha a precisar da mesma dependência, ele possa atuar como "proxy", evitando consumo desnecessário de banda. Por último, o maven oferece poderesas opções de cutomização de builds, testes e profiling. Sendo muito útil para descrever o roteiro do job de seu projeto java. Tecnologias semelhantes a esta são o Graddle e os Gemfiles dos projetos rails que por padrão buscam dependencias no rubygems.org.
Se você deseja colocar qualquer projeto Java, desktop, web ou mobile no Jenkins, recomenda-se que se use um gerenciador de dependências como o maven ou o graddle no seu projeto para que o processo de automação de tarefas seja conduzido de uma forma mais fácil de se configurar. Pois pode-se por exemplo setar configurações de build no pom.xml(se o projeto for maven) e com o suporte default do Jenkins a jobs em maven, fica muito mais fácil automatizar processos tais como build
, clean
, install
, package
e até mesmo conectar o projeto no Sonar.
O processo de configuração do maven é muito similar ao do compilador java da sessão anterior(Aliás, conforme você for trabalhando com Jenkins irá descobrir que esta organização é bem comum). Você pode ou apontar paro /bin
do mvn
que já deve estar instalado na sua máquina, ou vc pode falar para o jenkins baixar e usar uma versão por conta própria, conforme a figura abaixo:
Feito isso você já tem o mínimo do mínimo necessário para dar builds, e executar testes.
Criar um Job para dar Build
Criar um Job é fácil no Jenkins, basta ir em New Item
e definir um nome para ele, por exemplo: demo-build
, e depois definir o tipo do job que ele vai ser. Em seguida escolha como um projeto maven e de um ok.
Depois disso, vem a tela de configuração. Você vai precisar configurar um repositório e as credenciais para permitir que o jenkins possa clonar o código fonte. Caso você não saiba fazer isso leia o capítulo Credenciais e Repositórios.
Existem duas coisas que precisam ser feitas no mínimo para gerar uma build de um projeto java: Um respositório de onde o Jenkins acessa os fontes e o conjunto de tarefas que o maven deve fazer. Vamos para o segundo passo.
O Jenkins já cuida de configurações implícitas para você. A única coisa que precisa fazer é dizer a ele quais tarefas do maven executar.
As dependencias estão catalogadas no pom.xml
e serão baixadas e linkadas durante o processo da build automaticamente. No campo goals a seguinte configuração foi passada:
clean install -Dmaven.test.skip=true -Dpackage=war
Estes são comandos padrões do maven em que:
clean
Siginifca limpar o workspace de builds passadasinstall
Signinifica gerar um pacote que pode ser instalado como dependencia em outros projetos. Em outras palavras, é este comando que vai gerar o software a partir do repositório.-Dmaven.test.skip=true
Por padrão o maven executa qualquer teste configurado no seu projeto no processo de build. Setamos esta opção para forçar o maven a pular os testes, pois eles serão executados em um job separado só para fazer isso.-Dpackage=war
Passa por parâmetro ao maven como o software será "empacotado", war é a opção para um projeto web pronto para deploy em um servidor. Mas se o seu projeto for desktop(ou spring boot) você pode colocarjar
.
Feito isso você já terá(em teoria) condições de dar build no seu projeto.