====== 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 ====