====== 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 [[https://jenkins-ci.org|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:
- Escolha a opção //Gerenciar Jenkins// (ou //Manage Jenkins//);
- Entre na opção //Gerenciar Plugins// (ou // Manage Plugins//);
- Selecione a aba //Disponíveis// (ou //Available//);
- Selecione os plugins listados acima. Para facilitar a busca, utilize a opção de filtro (//filter//) para localizar esses plugins;
- 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 ====