Integração Contínua com CentOS 6.4, JDK 7, Maven, GitHub, Jenkins e JBoss AS 7.1.1 – Parte 1

Postado em

Introdução

Eu penso que todos nós que trabalhamos com desenvolvimento de software já praticamos ou pelo menos  ouvimos falar sobre Integração Contínua.

Veja a definição de Martin Fowler.

“Integração Contínua é uma pratica de desenvolvimento de software onde os membros de um time integram seu trabalho frequentemente, geralmente cada pessoa integra pelo menos diariamente – podendo haver multiplas integrações por dia. Cada integração é verificada por um build automatizado (incluindo testes) para detectar erros de integração o mais rápido possível. Muitos times acham que essa abordagem leva a uma significante redução nos problemas de integração e permite que um time desenvolva software coeso mais rapidamente.”

O objetivo desse post não é convencer ou leitor sobre benefícios e práticas de integração contínua mas sim mostrar de uma forma prática como isso pode ser feito em um ambiente JBoss.  Aconselho a leitura dos seguintes links:

Em nossos testes vamos utilizar o CentOS 6.4,  JDK 7Maven, GitHub, Git,  Jenkins e JBoss AS 7.

Apenas para visualizarmos melhor o ambiente observe  o figura abaixo:

Jenkins

Vamos utilizar o Jenkins que está no Servidor de nome Jenkins-Server para realizar o deploy no Servidor JBoss-Server.

Preparando o Sistema Operacional e Instalando o JBoss AS 7

Obs: Esse procedimentos devem ser executados no Jenkins-Server  e no JBoss-Server

Supondo que o CentOS 6.4 já esteja instalado  crie um grupo e adicione um usuário para ser utilizado pelo JBoss AS 7 nos servidores:

$ sudo groupadd jboss
$ sudo useradd -s /bin/bash -d /home/jboss -m -g jboss jboss

Faça também o download do JBoss AS 7 no diretório tmp:

$ cd /tmp
$ wget http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip

Crie a estrutura de diretórios para armazenar o JBoss:

 $ sudo mkdir /usr/local/jboss
 $ chown jboss:jboss /usr/local/jboss
 $ su jboss
 $ cd /usr/local/jboss/
 $ unzip /tmp/jboss-as-7.1.1.Final.zip

O JBoss AS 7 está instalado em /usr/local/jboss/jboss-as-7.1.1.Final .

Instalando JDK 7 

Obs: O JDK deve ser instalado no Jenkins-Server  e no JBoss-Server

Como todo servidor de aplicação o JBoss AS 7 requer um ambiente com JDK 7 devidamente configurado e instalado. O Java Development Kit (JDK) é um conjunto de utilitários para criação de softwares para plataforma Java. Existem várias implementações cada qual com a sua finalidade. Vamos instalar a Oracle HotSpot que é um dos JDKs mais utilizados atualmente. Ele pode ser baixado em:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Faça o download da versão jdk-7u21-linux-x64.rpm.

Para instalar utilizando a linha de comandos basta executar:


# rpm -Uvh jdk-7u21-linux-x64.rpm
Preparando... ########################################### [100%]
 1:jdk ########################################### [100%]
 Unpacking JAR files...
 rt.jar...
 jsse.jar...
 charsets.jar...
 tools.jar...
 localedata.jar..

Execute o comando java -version para verificar se o JDK foi realmente instalado:

 $ java -version
 java version "1.7.0_21"
 Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
 Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

Duvidas na instalação? Veja o link: http://docs.oracle.com/javase/7/docs/webnotes/install/index.html

Instalando Maven

Obs: O Maven deve ser instalado somente no Jenkins-Server.

Maven é um projeto da Apache Foundation que tem como objetivo facilitar o build e gerência das depêndencias do projeto. A página oficial do projeto é: http://maven.apache.org/

Faça o downlaod do arquivo apache-maven-3.0.5-bin.zip.

Na linha de comando execute:

 $ cd /tmp
 $ wget http://ftp.unicamp.br/pub/apache/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.zip

Crie a estrutura de diretório para armazenar o Maven:

 $ sudo mkdir -p /usr/local/apache/maven
 $ sudo chown  jboss:jboss /usr/local/apache/maven
 $ cd /usr/local/apache/maven
 $ unzip /tmp/apache-maven-3.0.5-bin.zip

Observe que o Maven foi instalado no diretório /usr/local/apache/maven/apache-maven-3.0.5.

Agora adicione a variável de ambiente MAVEN_HOME para todo o Sistema:

$ sudo vim /etc/profile.d/maven.sh

A seguinte configuração deve ser adicionada:

 export MAVEN_HOME=/usr/local/apache/maven/apache-maven-3.0.5
 export PATH=${MAVEN_HOME}/bin:${PATH}

Salve o arquivo e  execute  mvn -version para verificar se o Maven foi instalado corretamente:

 $ mvn -version
 Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 13:51:28+0000)
 Maven home: /usr/local/apache/maven/apache-maven-3.0.5
 Java version: 1.7.0_21, vendor: Oracle Corporation
 Java home: /usr/java/jdk1.7.0_21/jre
 Default locale: en_US, platform encoding: ANSI_X3.4-1968
 OS name: "linux", version: "2.6.32-358.0.1.el6.x86_64", arch: "amd64", family: "unix"

Instalando Git

Obs: O GIT deve ser instalado somente no Jenkins-Server.

Se você esteve morando no planeta terra nos últimos anos já deve ter ouvido falar de GIT.  Git é um sistema de controle de versão distribuído open source.

Página oficial do projeto: http://git-scm.com/

Para instalar o Git no Linux basta executar:

$ sudo yum install git-core

Execute o comando git –version para verificar se o GIT foi instalado corretamente:

 $ git --version
 git version 1.7.1

Uma boa documentação sobre GIT: http://git-scm.com/book/pt-br/Primeiros-passos-Configura%C3%A7%C3%A3o-Inicial-do-Git

Preparando a Estrutura do JBoss para Implantar o Jenkins

Como boa prática nas instalações do JBoss 7 é recomendado a criação de um novo perfil baseando-se no modelo desejado.
Nós vamos utilizar  no Jenkins-Server o Standalone Mode pois vamos utilizar essa instâncias simplesmente para implantar o Jenkins.

Para criar um novo perfil execute o seguinte comando:

$ cp -Rap /usr/local/jboss/jboss-as-7.1.1.Final/standalone /usr/local/jboss/jboss-as-7.1.1.Final/jenkins

Observe que criamos um perfil com o nome jenkins.

Na inicialização do serviço vamos “dizer” ao JBoss para utilizar o perfil jenkins ao invés  do standalone. Isso será configurado posteriormente.

Implantando o Jenkins no JBoss AS 7

Se você nunca ouviu falar do Jenkins para tudo agora e leia esse post: http://blog.caelum.com.br/integracao-continua-de-projeto-java-com-jenkins/  :)

A página oficial do projeto é: http://jenkins-ci.org/

Screen Shot 2013-05-31 at 15.44.24

Baixe o arquivo jenkins.war diretamente para o diretório deployments do JBoss:

 $ cd /usr/local/jboss/jboss-as-7.1.1.Final/jenkins/deployments/
 $ wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war

Agora o Jenkins está pronto para ser implantado no JBoss. Antes de inciar o JBoss configure o serviço que irá iniciar o JBoss utilizando o perfil Jenkins.

Edite o arquivo  vim /usr/local/jboss/jboss-as-7.1.1.Final/bin/standalone.conf e adicione a propriedade -Djboss.bind.address=0.0.0.0 para que o JBoss fiquei acessível externamente:

 #sets interface to binding for applications to be accessed from outside
 JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=0.0.0.0"

Para nossa alegria o JBoss 7 já vem com um exemplo de arquivo para colocar o JBoss como serviço precisando apenas fazer pequenas alterações.

Copei o arquivo jboss-as-standalone.sh para /etc/init.d/ :

$ sudo cp  /usr/local/jboss/jboss-as-7.1.1.Final/bin/init.d/jboss-as-standalone.sh /etc/init.d/

Crei também o  diretório /etc/jboss-as/ que conterá o arquivo jboss-as.conf:

$ sudo mkdir -p /etc/jboss-as

Agora copie o arquivo de configuração:

$ sudo cp /usr/local/jboss/jboss-as-7.1.1.Final/bin/init.d/jboss-as.conf /etc/jboss-as

O arquivo de configuração jboss-as.conf deve ser configurado como abaixo:

 # General configuration for the init.d scripts,
 # not necessarily for JBoss AS itself.

 # The username who should own the process.
 #
 JBOSS_USER=jboss

 # The amount of time to wait for startup
 #
 # STARTUP_WAIT=30

 # The amount of time to wait for shutdown
 #
 # SHUTDOWN_WAIT=30

 # Location to keep the console log
 #
 JBOSS_CONSOLE_LOG=/var/log/jboss-as/console.log

Para finalizar edite o arquivo /etc/init.d/jboss-as-standalone.sh e altere a propriedade JBOSS_HOME deixando exatamente como abaixo:

JBOSS_HOME=/usr/local/jboss/jboss-as-7.1.1.Final

Na propriedade LAUNCH_JBOSS_IN_BACKGROUND devemos passar o parâmetro
-Djboss.server.base.dir=$JBOSS_HOME/jenkins:

if [ ! -z "$JBOSS_USER" ]; then
 if [ -x /etc/rc.d/init.d/functions ]; then
 daemon --user $JBOSS_USER LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT -c $JBOSS_CONFIG -Djboss.server.base.dir=$JBOSS_HOME/jenkins 2>&1 > $JBOSS_CONSOLE_LOG &
 else
 su - $JBOSS_USER -c "LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT -c $JBOSS_CONFIG -Djboss.server.base.dir=$JBOSS_HOME/jenkins" 2>&1 > $JBOSS_CONSOLE_LOG &
 fi
 fi

Salve o arquivo.

Para facilitar altere o nome do arquivo /etc/init.d/jboss-as-standalone.sh para /etc/init.d/jboss:

$ sudo mv /etc/init.d/jboss-as-standalone.sh /etc/init.d/jboss

Dê permissão para o script ser executado:

$ sudo chmod a+x /etc/init.d/jboss

Adicione o jboss como serviço:

 $ sudo chkconfig --add /etc/init.d/jboss
 $ sudo chkconfig --level 3 /etc/init.d/jboss

Para iniciar o JBoss execute:

 $ sudo service jboss start
 Starting jboss-as: [ OK ]

Observe o Log do JBoss e veja que o Jenkins foi implatando com sucesso:

19:18:59,434 INFO  [hudson.WebAppMain] (hudson initialization thread) Jenkins is fully up and running

Acesse a url http://serverjenkins:8080/jenkins e veja a página inicial do Jenkins:

Jenkins

Finalizamos a implantação do Jenkins.

Vamos continuar as configurações na próxima parte🙂
Abraços,
— Mauricio Magnani

7 comentários em “Integração Contínua com CentOS 6.4, JDK 7, Maven, GitHub, Jenkins e JBoss AS 7.1.1 – Parte 1

    Ataxexe disse:
    3 de junho de 2013 às 9:20

    Muito show, Maurício! Pena que eu odeio o Maven..haheehaeha…

      Mauricio Magnani Jr respondido:
      3 de junho de 2013 às 9:49

      Ow Marcelo eu também odiava mas cara mudou a minha vida kkkkkkkkk

        Ataxexe disse:
        3 de junho de 2013 às 13:30

        Eu passei a odiar depois que ele mudou a minha vida…aehoueahoueahoeuahoea

        É ruim demais da conta…o Maven 3 corrigiu alguns problemas, mas não consigo mais engolir essas coisas da Apache que são xml pra configurar o xml de configuração do xml. Sem contar a burrocracia pra publicar uma biblioteca nos repositórios oficiais… alugar um imóvel parece até fichinha perto disso….

        Quando tiver um tempo, dá uma olhada no Gradle. É até divertido montar os builds nele (e ainda integra com os repositórios do Maven).

        Mauricio Magnani Jr respondido:
        3 de junho de 2013 às 15:26

        hahahaha em certos pontos como a burocracia vc tem razão é um saco.. mas vale a pena hehehe.

        Bom não conhece o Gradle vou dar uma olhada😀

        Ty Marcelo.

        Ataxexe disse:
        4 de junho de 2013 às 9:15

        vale sim…eu que encho o saco demais…haehheaahe…

        mas dá uma olhada no gradle, ele é muito interessante e tá bem estável.

        o pessoal do hibernate trocou há tempos, dá uma olhada aqui

        https://community.jboss.org/wiki/GradleWhy

        Mauricio Magnani Jr respondido:
        4 de junho de 2013 às 10:02

        Bacana mesmo…. bom vou testar em casa hoje se brincar já faço um post aqui kkkkk

    Joel Garcia disse:
    3 de junho de 2013 às 15:23

    Parabéns pelo tutorial!
    Quando sai a parte 2?
    Obrigado

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s