Back-End

25 set, 2013

Série Continuous Integration: Conectando Jenkins com GitHub

Publicidade

Olá, pessoal!

No artigo de hoje vamos ver como buildar nossos projetos no Jenkins e mantê-lo conectado a um repositório. No nosso caso, escolhemos o github por usar o Git. Claro que poderia ser um outro repositório – até mesmo local, mas o Github é o mais popular repositório Git.

Antes de mais nada, vou considerar que você já conhece um pouco de Git e GitHub, pois não entrarei em detalhes de como cada um funciona. Para isso você precisa ter:

  • Um repositório criado no GiHub;
  • Git na sua máquina local.

Os nossos steps

Basicamente criaremos um projeto e em seguida faremos um push para o GitHub. Tendo o projeto no nosso repositório remoto, vamos configurar o Jenkins para conversar com o GitHub  e poder realizar “pull” quando o build for inicializado.

Passo 1

  • Abra o seu eclipse e crie um Java Project chamado MyBookStore:

cimybookstore

  • Feito isso, envie esse projeto para o GitHub:

cimybookstoregithub

Uma vez que o projeto já está no repositório, vamos ao Jenkins fazer as devidas configurações (estou considerando que você já tem o Jenkins rodando na sua máquina, conforme o primeiro artigo da série).

Acesse o Jenkins e vá em Manage Jenkins; depois escolha Manage Plugins. Alguns plugins o Jenkins já traz e outros precisamos instalar. Na aba de Installed verifique se o plugin do GitHub Plugin está instalado:

githubplugin

Se não estiver, vá na aba de available e procure pelo plugin. Instale também um plugin chamado Git Plugin. Esse é para que o Jenkins possa rodar os comandos do Git.

Note: use a opção install without restart.

Configurando o Jenkins

Agora vamos configurar o jenkins, portanto em manage Jenkins escolha configure system e observe que você deve ter um Git na lista:

jenkinsconfigsystem

Esses caras servem para configuramos e dizermos ao Jenkins como ele deve se comportar se o projeto que fomos buildar usar um deles. Não é requerido preencher todos, exceto se você tem N projetos e cada projeto tem que usar uma estrutura diferente, por um usar ant e outro maven, daí você precisa configurar tanto maven quando o ant nessa parte do Jenkins.

Primeiro vamos configurar o JDK que é requerido para qualquer projeto Java onde precisamos compilar as classes .java.

Coloque o local onde instalou o Java, conforme a imagem a seguir:

jenkinsjdk

Assim dizemos ao Jenkins onde está o nosso Java e qual ele deve usar para compilar as nossas classes durante o build. Agora vamos para o Git:

jenkinsgitconfigure

Nada de diferente, apenas informamos onde está o Git na nossa máquina.

Deixamos as próximas opções da maneira default. Agora vamos configurar o Git Plugin que contém as informações do usuário que fez o commit.

jenkinsgituserconfigure

Observe que estamos configurando o Git e não GitHub. Essa é uma das partes mais importantes e demorei horas para descobrir, aqui vamos colocar key-gen registrado lá no github:

publishsshkenkinsgithub

Em Github web Hook deixei a opção Manually manage hook URLs selecionada. Salve as modificações.

Pronto, Jenkins configurado.

Criando jobs no Jenkins

Agora vamos criar um job no Jenkins para o nosso projeto.

jenkinsnewjob

E darei o mesmo nome do projeto:

jobjenkinsbookstore

Ao criar o job, vamos para as configurações que nos interessa:

gitsourcecodejenkins

Precisamos informar onde está o nosso repositório (pode estar localmente ou remoto). No nosso caso está remoto no GitHub, que é o: https://github.com/camilolopes/myworkspace.git

sourcecodegitjenkins

E deixamos assim. É esse cara que o Jenkins fará o clone, por isso que ele precisa da URL. Feito isso podemos salvar e buildar nosso projeto:

jenkinsbuildbookstoreClique na barra de loading à esquerda para ver o log:

jenkinsgithubstoreclone

Observe que o Jenkins conectou ao Github e está trazendo o que temos no repositório, nesse caso MyBookStore.

Resultado

A seguir o resultado:

jenkinsresult

A nuvem, eu costumo dizer que o projeto passou por algumas turbulências; o solzão está tudo tranquilo, todo time pode ir para praia tranquilo que ninguém vai ligar para incomodar.

Pronto, temos nosso projeto  sendo construído pelo Jenkins.

Falha no Jenkins

Vamos simular uma falha e ver o que acontece, e para isso precisamos alterar a classe para que o código não compile:

mybookstorenocompile

Daí podemos mandar essa alteração para o GitHub. Uma vez com o código alterado no Github:

githubcodechangestore

Precisamos configurar o maven, então vá em manage jenkins e na parte do maven deixe assim:

mavenconfigurejenkins

Esquecemos de configurar no Job como será o build, então vá no job que criamos e depois em configure e deixe assim o build:

buildmavenjenkins

Clique em advanced do build:

buildmavencompile1

No eclipse, clique com o botão direito no projeto e adicione Maven >> e habilite o maven. Agora commit e manda as alterações para o github.

Agora vamos mandar o Jenkins buildar nosso projeto e ver o que acontece:

jenkinsfailurebuildstoreVamos tentar arrumar isso corrigindo o código. Altere-o e mande para o GitHub:

githubfixedstore

E agora vamos buildar pra ver o que acontece:

buildifxedbookstore

Pronto, assim concluímos essa parte. Um pouco cansativo na primeira vez devido a configurações, mas depois fica mais fácil. No próximo artigo veremos como automatizar, ou seja, com uma mudança no nosso repositório remoto, automaticamente o build começa. Fez push para o github, o build  começa a validar.