wiki:programmersguide/jenkins

Version 23 (modified by raphael.costa, 10 years ago) (diff)

--

TerraMA² - Jenkins Configuration

Autor: Paulo R. M. Oliveira, Flaverton Rosa, Gilberto Ribeiro de Queiroz

Data: 06/10/2015

Resumo: Este documento apresenta como configurar o Jenkins para executar tarefas de build da TerraLib/TerraView e do TerraMA².

Integração Continua

"Integração Contínua é uma pratica de desenvolvimento de software onde os membros de um time integram seu trabalho com certa frequência, podendo ocorrer diariamente ou até mesmo várias vezes ao 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 dos problemas de integração e permite que um time desenvolva software coeso mais rapidamente.” Martin Fowler

Quais os benefícios de fazer integração continua?

Basicamente, a grande vantagem da integração contínua está no feedback instantâneo. Isso funciona da seguinte forma: a cada commit no repositório, o build é feito automaticamente, com todos os testes sendo executados de forma automática e falhas sendo detectadas. Se algum commit causar uma erro compilação ou quebrar qualquer um dos testes, a equipe toma conhecimento instantaneamente (ex: através de e-mail). A equipe pode então corrigir o problema o mais rápido possível, o que é fundamental para não introduzir erros ao criar novas funcionalidades, refatorar, etc.

Integração contínua é mais uma forma de trazer segurança em relação a mudanças: você pode fazer modificações sem medo, pois será avisado caso algo saia do esperado.

O que é o Jenkins

O Jenkins é uma ferramenta de integração contínua, que fornece um ambiente de execução de jobs pré-definidos com o objetivo de simplificar e automatizar o workflow de desenvolvimento de sistemas.

O Jenkins pode ser utilizado para:

  • Análise de Código;
  • Realização do processo de build do código de um sistema;
  • Execução dos testes;
  • Geração de instaladores e pacotes;
  • Deploy.

Instalacão do Jenkins no Linux Ubuntu 14.04

Instalação e Configuração da Instância Master

Baixar a chave do repositório Jenkins:

$ wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -

Adicionar ao arquivo /etc/apt/sources.list a URL do repositório:

$ echo "deb http://pkg.jenkins-ci.org/debian binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list

Fazer a instalação do pacote Jenkins:

$ sudo apt-get update && sudo apt-get install jenkins

Agora, o Jenkins já deverá estar funcional e disponível para acesso no navegador. Basta digitar o seguinte endereço no seu navegador:

http://localhost:8080

Se tudo estiver funcionando corretamente, instale os seguintes plugins:

  • Git Plugin: (id: git).
  • CMake Builder Plugin: (id: cmake).
  • MSBuild Plugin: para o build em ambientes Microsoft Windows com Visual C++ (id: msbuild).
  • Condicional BuildStep Plugin: para execução de jobs em mais de um tipo de sistema operacional (id: conditional-step).
  • GitHub pull request builder plugin: para disparar a compilação para um pull request do GitHub (id: ghprb).

Para instalar um plugin siga os seguintes passos na interface gráfica principal do Jenkins no seu navegador:

  1. Escolha a opção Gerenciar Jenkins (ou Manage Jenkins);
  2. Entre na opção Gerenciar Plugins (ou Manage Plugins);
  3. Selecione a aba Disponíveis (ou Available);
  4. Selecione os plugins listados acima. Para facilitar a busca, utilize a opção de filtro (filter) para localizar esses plugins;
  5. Finalmente, escolha a opção Baixar, Instalar e Reiniciar.

Instalação e Configuração de Instâncias Slaves

Para configurar uma máquina (virtual ou física) como slave, você deverá instalar as ferramentas necessárias para a compilação do TerraMA2. Preparamos um bash script para a compilação e instalação das dependências no Linux Ubunutu 14.04. Este script pode ser encontrado no código fonte do TerraMA² na pasta install.

Siga os seguintes passos:

  1. Baixe o pacote de dependências utilizado pela equipe de desenvolvimento: terrama2-3rdparty-linux-ubuntu-14.04.tar.gz .
  1. Copie o script install-3rdparty-linux-ubuntu-14.04.sh da pasta install para a mesma pasta que você baixou o pacote do passo anterior.
  1. Abra a linha de comando e execute o script install-3rdparty-linux-ubuntu-14.04.sh especificando a pasta para instalar as dependências.
$ TERRAMA2_DEPENDENCIES_DIR="/opt/3rdparty" ./install-3rdparty-linux-ubuntu-14.04.sh

Criando um slave Ubuntu

Na interface gráfica da instância mestre em seu navegador, siga os seguintes passos para configurar a instância slave, associando-a a esta instância master:

  • No lado esquerdo do painel, clique em Estado do executor de builds (Build Executor Status).
  • Em seguida, clique em Novo Nó (New Node).
  • Forneça um nome ao slave, por exemplo: ubuntu-14.04.
  • Selecione a opção Slave Burro (Dumb Slave).
  • Clique em Ok.
  • Na opção Descrição (Description) forneça uma breve descrição da instância, por exemplo: “Slave Linux Ubuntu 14.04”.
  • Na opção Número de Executores (# of executor), ajuste o número de processadores desejados, isto é, o número de builds concorrentes para esta instância.
  • Em Diretório root remoto (Remote root directory), preencha com um caminho que será acessível ao usuário configurado mais abaixo, por exemplo /home/jenkins/jenkins-data. Isto fará com que os arquivos de configuração e do workspace sejam armazenados nesta pasta e mantidos em caso de reinicialização.
  • Agrupe slaves utilizando o mesmo Rótulo, por exemplo: ubuntu.
  • Na opção Uso (Usage) selecione Utilize este slave, tanto quanto possível (Utilize this node as much as possible).
  • Na opção Método de lançamento (Launch Method) selecione Launch salve agents on Unix machines via SSH.
  • Na opção Host insira o endereço IP do slave.
  • Em Credentials, clique no botão Add.
  • Na opção Kind selecione Username and password.
  • Na opção Scope selecione Global.
  • Preencha username e password com seus dados para conectar via SSH no slave.
  • Na opção Disponibilidade selecione Manter este slave ligado quanto for possível.
  • Clique em Salvar.

Observação: Se você não deseja que a instância master execute jobs, deverá editar as configurações do master e ajustar o número de executores para zero.


Criando um slave Windows

Pré-requisitos:

Necessário ter instalado os seguintes aplicativos:

  • Visual Studio 2013 (pode ser a versão community)
  • CMake *
  • Git *

Os aplicativos marcados com * devem estar acessíveis pela linha de comando, adicione-os no PATH do sistema.

Baixe o arquivo terralib5-3rdparty-msvc-2013-win64.zip com as dependências para compilar a TerraLib/TerraView

Observação:: Para configurar um slave windows é necessário que o slave consiga acessar o Jenkins pela url configurada em: Jenkins -> Gerenciar Jenkins -> Configurar o sistema -> Jenkins Location -> Jenkins URL. A configuração padrão (http://localhost:8080) não pode ser utilizada neste caso pois ao executar o comando para inicializar o slave, a comunicação com o servidor do Jenkins utiliza esta URL, sendo assim, se esta estiver utilizando localhost o slave não consegue acessar o servidor. Preencha este campo com o IP do servidor do Jenkins.

Na interface gráfica da instância mestre em seu navegador, siga os seguintes passos para configurar a instância slave, associando-a a esta instância master:

  • No lado esquerdo do painel, clique em Estado do executor de builds (Build Executor Status).
  • Em seguida, clique em Novo Nó (New Node).
  • Forneça um nome ao slave, por exemplo: windows-8.
  • Selecione a opção Slave Burro (Dumb Slave).
  • Clique em Ok.
  • Na opção Descrição (Description) forneça uma breve descrição da instância, por exemplo: “Slave Windows 8”.
  • Na opção Número de Executores (# of executor), ajuste o número de processadores desejados, isto é, o número de builds concorrentes para esta instância.
  • Em Diretório root remoto (Remote root directory), preencha com um caminho que será acessível ao usuário configurado mais abaixo, por exemplo C:\users\scidb\jenkins. Isto fará com que os arquivos de configuração e do workspace sejam armazenados nesta pasta e mantidos em caso de reinicialização.
  • Agrupe slaves utilizando o mesmo Rótulo, por exemplo: windows-8.
  • Na opção Uso (Usage) selecione Utilize este slave, tanto quanto possível (Utilize this node as much as possible).
  • Na opção método de lançamento selecione Lançar os agentes slave via JNLP.

Para inicializar a instância do slave windows:

  • Acesse a página inicial do Jenkins no slave windows.
  • No lado esquerdo do painel, no painel Estado do executor de builds clique no item do slave windows.
  • Execute o comando apresentado no item: Executar comando de linha pelo slave.
  • Se o comando for executado com sucesso, aparecerá uma janela com status do Slave como Conected.
  • Nesta janela, adicione a inicialização do slave como um serviço do windows: File -> Install as a service.
  • Será criado um serviço do windows com o nome: Jenkins Slave

Observação: Caso não seja encontrada a instalação do .NET Framework 3.5, deve ocorrer um erro. Instale o .NET Framework 3.5 e execute o comando novamente.


Criando um Job para Build da TerraLib

Definição de um Job a ser Executado no Slave Linux Na interface gráfica principal do Jenkins, no navegador, acessível na instância mestre, siga as instruções abaixo:

  • Clique em Novo Job (New Item).
  • Preencha o campo Nome do Job (Item Name). Exemplo: build-terralib.
  • Selecione a opção Free-style project.
  • Clique em OK.
  • Informe uma Descrição (Description) para o projeto de build: Build TerraLib? and TerraView?. Branches: release-5.0, develop
  • Selecione Descartar Builds Antigos (Discard Old Builds).
  • Ajuste o #Máximo de builds (Max # of builds to keep). Exemplo: 100.
  • Selecione Git no tópico Gerenciamento de código fonte.
  • Em Repository URL aponte para: https://gitlab.dpi.inpe.br/terralib/terralib.
  • Em Branches to build aponte para o branch correto, como por exemplo: */master.
  • Na opção Trigger de Builds (Build Triggers), escolha a opção Poll SCM e ajuste uma escala de tempo adequada, por exemplo, consultar o servidor por mudanças uma vez ao dia: Schedule : H 8 * * 1-5. Essa estrutura representa que o job será disparado diariamente as 08:00 AM, de segunda a sexta.
  • Na opcao Build escolha Conditional steps (multiple)
  • Em Run escolha execution node
  • Em Execute on escolha o slave onde será executado o job, por exemplo: ubuntu-14.04
  • Em Steps to run if condition is met
  • Selecione CMake Build e informe o seguinte:
  • Buildscript Generator: Unix Makefiles.
  • Source Directory: build/cmake
  • Build Type: Release
  • Build Directory: solution
  • Em Advanced entre com os seguinte argumento para o CMake (other CMAKE arguments):
    -DCMAKE_BUILD_TYPE:STRING='Release'
    -DCMAKE_PREFIX_PATH:PATH="/home/jenkins/MyLibs;/home/jenkins/MyLibs/lib;/home/jenkins/MyLibs/gdal2;/home/jenkins/MyLibs/pgsql"
    -DTERRALIB_BUILD_EXAMPLES_ENABLED:BOOL=OFF
    -DTERRALIB_BUILD_UNITTEST_ENABLED:BOOL=OFF
    -DTERRALIB_DOXYGEN_ENABLED:BOOL=OFF
    -DTERRALIB_QHELP_ENABLED:BOOL=OFF
    -DTERRALIB_QTRANSLATION_ENABLED:BOOL=OFF
    -DTERRALIB_MOD_BINDING_JAVA_ENABLED:BOOL=OFF
    -DTERRALIB_MOD_BINDING_PYTHON_ENABLED:BOOL=OFF
    -DTERRALIB_MOD_BINDING_LUA_ENABLED:BOOL=OFF
    -DGEOS_INCLUDE_DIR:PATH="/home/jenkins/MyLibs/include/geos"
    -DGNUGETTEXT_INCLUDE_DIR:PATH="/usr/include"
    -DGNUGETTEXT_LIBRARY:FILEPATH='/usr/lib/x86_64-linux-gnu/libgettextpo.so'
    -DGNUICONV_LIBRARY:FILEPATH='/usr/lib/x86_64-linux-gnu/libc.so'
    -DCMAKE_INSTALL_PREFIX="/home/jenkins/Programs/terralib5"
    
  • Adicione dois Build Tool Invocations, uma para o make e outra para o make install (neste último caso basta colocar o argumento install).

Criando um Job para Build do TerraMA2

Definição de um Job a ser Executado no Slave Linux Na interface gráfica principal do Jenkins, no navegador, acessível na instância mestre, siga as instruções abaixo:

  • Clique em Novo Job (New Item).
  • Preencha o campo Nome do Job (Item Name). Exemplo: build-terrama2.
  • Selecione a opção Free-style project.
  • Clique em OK.
  • Informe uma Descrição (Description) para o projeto de build: Build TerraMA2 branch master.
  • Selecione Descartar Builds Antigos (Discard Old Builds).
  • Ajuste o #Máximo de builds (Max # of builds to keep). Exemplo: 10.
  • Selecione Git no tópico Gerenciamento de código fonte.
  • Em Repository URL aponte para: https://github.com/TerraMA2/terrama2.git.
  • Em Branches to build aponte para o branch correto, como por exemplo: */master.
  • Na opção Trigger de Builds (Build Triggers), escolha a opção Poll SCM e ajuste uma escala de tempo adequada, por exemplo, consultar o servidor por mudanças a cada 10 minutos: Schedule : 10 * * * *.
  • Na opcao Build escolha Conditional steps (multiple)
  • Em Run escolha execution node
  • Em Execute on escolha o slave onde será executado o job, por exemplo: ubuntu-14.04
  • Em Steps to run if condition is met
  • Selecione CMake Build e informe o seguinte:
  • Buildscript Generator: Unix Makefiles.
  • Source Directory: build/cmake
  • Build Type: Release
  • Build Directory: solution
  • Em Advanced entre com os seguinte argumento para o CMake (other CMAKE arguments):
    -DCMAKE_INSTALL_PREFIX:PATH='$WORKSPACE/install/terrama2' 
    -DCMAKE_PREFIX_PATH:PATH='/opt/3rdparty;/opt/3rdparty/terralib5;/opt/3rdparty/terralib5/lib/cmake'
    
  • Adicione dois Build Tool Invocations, uma para o make e outra para o make install (neste último caso basta colocar o argumento install).