| 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:
- 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 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:
- Baixe o pacote de dependências utilizado pela equipe de desenvolvimento: terrama2-3rdparty-linux-ubuntu-14.04.tar.gz .
- 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.
- 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).
