TerraLib and TerraView Wiki Page

Tutorial de Configuracao do Jenkins para TerraLib/TerraView

Autores: Flaverton R. Rosa e Gilberto Ribeiro de Queiroz

Data: 08 de Julho, 2015

Objetivo: Este tutorial tem por objetivo apresentar a ferramenta Jenkins, como fazer sua instalação e configuração para criação de jobs em nós mestres (master) e escravos (slaves).

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. Trata-se de um fork do projeto Hudson da Oracle, que atualmente encontra-se sob o guarda-chuva da Eclipse Foundation.

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.

TODO: incluir parágrafo sobre integração contínua e lista de termos

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).

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 ao build da TerraLib e do TerraView. O comando abaixo instalará todas as ferramentas necessárias ao build:

$ sudo apt-get update && sudo apt-get install ssh build-essential git cmake openjdk-7-jdk

Observação: na máquina slave não será preciso instalar o Jenkins.

Agora você deverá instalar todas as bibliotecas de terceiros requeridas pela TerraLib e pelo TerraView. Abaixo ilustramos como fazer isto apenas para testar o uso do Jenkins:

$ sudo apt-get install libboost1.55-all-dev
$ sudo apt-get install qt5-default 
$ sudo apt-get install qttools5-dev
$ sudo apt-get install libqt5svg5-dev
$ sudo apt-get install libqt5designer5
$ sudo apt-get install liblog4cxx10-dev
$ sudo apt-get install libgdal-dev
$ sudo apt-get install libgeos++-dev
$ sudo apt-get install libgettextpo-dev
$ sudo apt-get install libproj-dev

Os comandos acima encontram-se resumidos em uma única linha da seguinte forma:

$ sudo apt-get install libboost1.55-all-dev qt5-default qttools5-dev libqt5svg5-dev libqt5designer5 liblog4cxx10-dev libgdal-dev libgeos++-dev libgettextpo-dev libproj-dev

Além das bibliotecas acima, você precisará instalar a QWT e a QtPropertyBrowser, conforme explicado na seção de build da TerraLib.

Outra medida importante é desabilitar a verificação via SSL no git para o usuário que se conectará à instancia slave via SSH. Você pode fazer isso da seguinte forma, aplicando para todos os usuários:

$ sudo git config --system http.sslverify false

Ou pode fazer somente para usuário corrente:

$ git config --global http.sslverify false

Dica: Você pode consultar informacoes sobre os pacotes da seguinte forma:

$ apt-cache show libproj0
$ apt-cache search boost | more

Associando a Instância Slave à Master

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: tview-linux-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: “Build do TerraView no 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: TerraView.
  • 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.

Instalação e Configuração do Jenkins em Máquinas Windows

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

Associando a Instância Slave à Master

Backup com Jenkins Master

Configuração de Idioma da Instância Master

Definindo Configurações para Envio de e-mails

Criando um Job para Build da TerraLib e TerraView 5

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: tview-develop-build.
  • Selecione a opção Free-style project.
  • Clique em OK.
  • Informe uma Descrição (Description) para o projeto de build: Build TerraLib/TerraView using the source code from branch develop.
  • 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://git.dpi.inpe.br/terralib5.
  • 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 de acesso ao repositório Git da TerraLib e TerraView.
  • Em Branches to build aponte para o branch correto, como por exemplo: */develop.
  • Na opção Trigger de Builds (Build Triggers), escolha a opção Build Periodically e ajuste uma escala de tempo adequada, por exemplo, consultar o servidor por mudanças a cada 15 minutos: H/15 * * * *.
  • 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: tview-linux-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='/home/scidb/MyInstalls/terralib5'
-DCMAKE_PREFIX_PATH:PATH='/usr;/usr/local;/usr/local/qwt-6.1.2'
-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
-DGEOS_INCLUDE_DIR:PATH='/usr/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'
  • Adicione dois Build Tool Invocations, uma para o make e outra para o make install (neste último caso basta colocar o argumento install).

Definição de um Job a ser Executado no Slave Windows