Série Continuous Integration: Build a partir da Tag Github

jenkinslogo

Olá Pessoal,

O post de hoje vamos ver como fazer um build no Jenkins a partir de uma tag  do Github. Vou considerar que você já como configurar o seu job no Jenkins com o Git/Github.

Lets go…

 

Starting…

Uma hora você vai precisar fazer um build de uma tag, versão estável. Então como fazer isso  no Jenkins?Você pode pensar que é apenas informar */tags/nomedatag É bem simples veja os passos:

Passo 1

Instale o plugin Git parameter Plugin no Jenkins

Passo 2

Marque a  opção  : This build is parameterized. Vou considerar que você já tem a tag criada no seu repositório Github

jenkinstaggithub

Agora preencha conforme a imagem acima, observe que no campo tag filter, é o nome da tag que você deu. Em Branch coloque */tags

Passo 3

Agora em source code  management deixei conforme a imagem a seguir:

jenkinsgittagsource

O ponto mais importante aqui é informar em branch o parâmetro ${tag} que acabamos de crair no passo anterior.

Passo 4

Salve as alterações

Passo 5

Clique em Build with parameter  e escolha a tag que acabou de criar.

jenkinsgithubcheckouttag

Pronto agora é aguardar o build ser concluído e verificar no console  que o código está sendo baixado a partir da tag

Vou ficando por aqui e espero que tenham gostado do post.

Abraços, see ya!!

Série Continuous Integration: Criando uma tag no github via Jenkins

 

jenkinslogo

olá Pessoal,

Hoje vamos ver como criar uma tag em nosso projeto e publicar no github. Considerando que você já tem o seu ambiente Jenkins funcionando.

Lets go..
Starting…

Primeiro passo é instalar o plugin Git Publisher.

Passo 2

Após ter instalado o plugin vá no seu projeto e clique em configuration. Em sourceCode Management clique em Advanced

jenkinsgittagsourcecode

No campo Name que deve está vazio, informe o nome que desejar, eu coloco o nome do projeto.

Passo 3

Adicione um Post-build Actions Step e escolher Git Publisher

jenkinsgitpublisher

Observe que podemos ter um create new tag ou update new tag. Se for uma nova tag escola create new tag. Informe em Tag to Push como será o nome da sua tag.

O ponto mais importante aqui que temos é informar o repositorio que é feito em Target remote name onde informar o nome que definimos nos campo Name em source
code.

Passo 4

Feito isso, salve as alterações e iniciei o build. Após a conclusão do build a tag será criada no github, vá no repositorio e veja se a tag foi criada em
releases

jenkinstaggithubreleased

Simples não? Agora vc tem a criação de tags para o github automatizada.

abraços,

Troubleshooting Jenkins com repositório privado Github

 

Olá Pessoal,

Quebrei a cabeça esses dias tentando fazer o jenkins se comunicar com um repositório privado no GitHub. Considerando que o jenkins está em um servidor remoto, deu muito trabalho, gastei umas 12hrs até funcionar.

O Problema:

jenkins github private repository returned status code 128:

Essa é a exceção que recebemos quando o Jenkins tenta conectar ao repositório privado para fazer o clone.

O motivo?

O Jenkins não consegue autenticar para fazer o clone.

O que achei?

Não fui muito feliz achando que era da mesma forma que fazemos com repositório público, que apenas gerar o ssh key e adicionar no github. Mas não é bem assim.

Solução

Para resolver o problema eu tive que adicionar 2 ssh key.

  1. Gerei um ssh específico (algo como id_rsa_meuprojeto);
  2. Peguei o id_rsa que já tinha no meu servidor e adicionei ao github.

Resumindo em steps

1. Passphrase não pode ter password, ou seja,  deixar empty para o id_rsa_meuprojeto

2. Criei um key específico id_rsa_meuprojeto e adicionei no github e dei authorized no servidor pelo painel. No meu caso uso  integrator

3. Adicione o id_rsa do servidor no github

4. No Jenkins usei key do id_rsa_meu projeto

Veja na imagem a seguir:

demoniojenkinsfixed

E no Jenkins informe o repositório assim:

jenkinsconfiggithub

Ou seja, usando git@github.com:youruser/yourproject

Não use Https, porque não vai.

É isso ai, só buildar e ver o clone rolando.

Abraços, see ya!! 

Gerando Artifacts Maven para Github

 

Olá Pessoal,

No post de hoje vamos ver como gerar um artifacts usando Maven e o Github, ou seja, vamos dizer que você precisa fazer um deploy e quer deixar isso automático e que o .jar, por exemplo, já fique na pasta específica.

Lets go…

Certamente você não vai querer fazer deploy manualmente, certo? E gostaria que esse fosse integrado com o seu build e seu repositório. Na semana passada eu passei por uma situação assim e fui pesquisar para ver como fazer. Veja o contexto a seguir.

Contexto

Estava concluída a primeira versão da API para JSF: a I4JSF, mas não sabia como fazer um deploy direto para o GitHub, ou seja, ao chamar o comando mvn deploy gostaria que o artifact já fosse publicado no Github. É muito simples. Vejamos os passos a seguir:

Passo 1 – Altere o arquivo setting.xml do maven, normalmente localizado em .m2/config. Adicione nas tags <Servers/>

<server>

      <id>github</id>

      <username>SEU_USERNAME</username>

      <password>SUA_SENHA</password>

    </server>

Passo 2 – Altere o pom.xml do seu projeto

<!– tell the github site-mavenplugin about the new server –>

<properties>

<!– github server corresponds to entry in ~/.m2/settings.xml –>

<github.global.server>github</github.global.server>

</properties>

<!– Finally, tell the site plugin where the artifact has been deployed –>

<distributionManagement>

<repository>

<id>github</id>

<name>GitHub ${project.artifactId} Repository</name>

<url>https://raw.github.com/camilolopes/${project.artifactId}/mvn-repo</url>

</repository>

</distributionManagement>

 Adicione o plugin site-maven-plugin ao pom.xml

<!– Plugin for GITHUB –>

<plugin>

<groupId>com.github.github</groupId>

<artifactId>site-mavenplugin</artifactId>

<version>0.8</version>

<configuration>

<message>Maven artifacts for ${project.version}</message> 

<noJekyll>true</noJekyll>

<outputDirectory>${project.build.directory}/mvn-repo</outputDirectory>

<branch>refs/heads/mvn-repo</branch>                      

<includes>

<include>**/*</include>

</includes>

<repositoryName>your_repository_name</repositoryName>     

<repositoryOwner>YOURUSERNAME</repositoryOwner>  

</configuration>

<executions>

<execution>

<goals>

<goal>site</goal>

</goals>

<phase>deploy</phase>

</execution>

</executions>

</plugin>

 

Passo 3 – Adicione o plugin de deploy

<!– setting deploy in github artifacts –>

<plugin>

<artifactId>maven-deploy-plugin</artifactId>

<version>2.7</version>

<configuration>

<altDeploymentRepository>internal.repo::default::file://${project.build.directory}/mvn-repo</altDeploymentRepository>

</configuration>

</plugin>

Não se preocupe com a branch mvn-repo, ela será criada automaticamente.

Passo 4 – Execute mvn clean deploy e aguarde o download dos plugins.

Acesse o GitHub e veja que a branch mvn-repo foi criada. É onde ficam os .jars:

githubrepo

Pronto, agora ao executar mvn deploy o .jar já vai automaticamente para o GitHub. Fantástico, não?

 Adicionando dependência em outro projeto

Vamos dizer agora que um projeto X decidiu usar seu .jar via maven. O que fazer? Veja a seguir o que ele precisa adicionar no pom.xml:

 <!– I4JSF –>

                <repository>

        <id>I4JSF-mvnrepo</id>

        <url>https://raw.github.com/camilolopes/I4JSF-API/mvn-repo/</url>

        <snapshots>

            <enabled>true</enabled>

            <updatePolicy>always</updatePolicy>

        </snapshots>

    </repository>

E nas dependências:

<dependency>

       <groupId>com.i4jsf</groupId>

       <artifactId>i4jsf</artifactId>

       <version>1.0.0</version>

     </dependency>

 

githubmvnrepocheckoutmaven

Vou ficando por aqui.

See ya!!! 

Série CI:Build Automatizado com Jenkins e GitHub

Olá Pessoal,

No último post vimos como conectar o Jenkins com o GitHub. Hoje veremos como automatizar o nosso build, ou seja, se alguma mudança ocorreu no repositório, um novo build é iniciado.

Lets go…

Starting…

Considerando que você tem o cenário do post anterior conforme a imagem a seguir:

 

cijenkinscenario

Clique no projeto MyBookStore e vá em configure.

Em build trigger deixe assim:

buildtriggerjenkins

O que fizemos?

Simples, estamos dizendo que a cada mudança no github vamos precisar rodar um novo build, porém, como estamos rodando localmente o jenkins, não tem como o Github informar ao Jenkins que algo mudou, então faremos o Jenkins verificar a cada 1min se algo mudou no Github. Essa é a forma que temos de fazer isso quando não temos o jenkins em um IP Público.

Feito isso, vá em manage jenkins >> configure system

E em GitHub Web Hook deixamos assim:

githubwebhook

Após inserir seus dados do github e a url do repositório, clique em test credential.

Agora vamos testar e ver se o build vai iniciar automaticamente. Mas antes veremos como estamos:

 

historybookstorebuild

No meu caso tenho o histórico de build acima. É esperado que se algo for alterado no repositório uma nova build seja iniciada, claro que não será de imediato, mas sim cada 1 min.

Vá no seu GitHub e acesse o projeto:

mybookstoregithubjenkins

Aperte a tecla T e você poderá realizar uma pesquisa no GitHub. Procure por store e escolha StoreMatrix.java 

storematrixgithub

É a classe que vamos realizar a alteração e aguardar o Jenkins build. Ao selecionar a classe, clique no botão Edit e adicione o atributo address.

addressaddedstorematrix

Clique no botão commit changes .

Vamos aguardar por 1 min e ver se o jenkins inicia o build. O resultado é como a seguir:

buildqueuejenkinsbookstore

Pronto! Temos agora nosso build automatizado conectado ao jenkins. Simples, não?

Vou ficando por aqui e espero que tenham gostado do post.

Abraços, see ya!!