Integração Continua - Jenkins

Preview:

Citation preview

Jenkins

João Carlos Ottobboni

Agenda

- Introdução - Histórico da Ferramenta;- Descrição das Características;- Ferramentas Concorrentes;- Usando Jenkins em um projeto Ruby on Rails;- Conclusão e Referências.

IntroduçãoIntegração Continua de Software - CI

Integração continua é uma pratica de desenvolvimento de software onde os membros de um time integram seu trabalho freqüentemente. Geralmente uma pessoa integra pelo menos uma vez ao dia - podendo haver múltiplas integrações por dia. Cada integração é verificada por um build automatizado(Incluindo os testes) para detectar erros de integração o mais rápido possível. Muitos times acham que essa abordagem leva a diminuir significativamente os problemas de integração e permite que o time desenvolva software coeso mais rapidamente.

-Martin Fowler

Introdução

Antes da CI

Exemplo de CI

Exemplo de CI

Exemplo de CI

Exemplo de CI

Exemplo de CI

Exemplo de CI

Exemplo de CI

Exemplo de CI

Exemplo de CI

Exemplo de CI

Exemplo de CI

Exemplo de CI

Jenkins● Jenkins é o lider open-source para integração continua. Construído em Java ele prove

mais de 400 plugins para dar suporte a construção e teste de projetos.

● Construindo projetos de software / testes continuamente, assim como CruiseControl ou Damagecontrol. Em poucas palavras, o Jenkins fornece um sistema de integração contínua fácil de usar, tornando mais fácil para os desenvolvedores integrar as alterações no projeto, e tornando mais fácil para os usuários obterem uma nova compilação.

Histórico● Jenkins foi originalmente desenvolvido como o projeto Hudson

● A Criação de Hudson começou no verão de 2004 na Sun Microsystems. Foi lançado pela primeira vez em java.net em fevereiro de 2005.

● Por volta de 2007 Hudson tornou-se conhecida como uma alternativa melhor para CruiseControl e outros acúmulos de servidores de código aberto.

● Em novembro de 2010, surgiu uma questão na comunidade Hudson no que diz respeito à infra-estrutura utilizada, que cresceu para abranger questões sobre a gestão e controle pela Oracle. As negociações entre os principais colaboradores do projeto e do Oracle aconteceu e, embora houvesse muitas áreas de concordância um ponto chave foi a marca registrada "Hudson" , depois que a Oracle requereu o direito ao nome para uma marca registrada em dezembro de 2010.

Histórico● Como resultado, em 11 de janeiro de 2011, uma chamada por votos foi feito para mudar o

nome do projeto "Hudson" para "Jenkins". a proposta foi aprovada por maioria esmagadora.

● Em 1 de fevereiro de 2011, a Oracle disse que tinham a intenção de continuar o desenvolvimento do Hudson, e considerou o Jenkins uma nova ferramenta em vez de uma mudança de nome. Jenkins e Hudson, portanto, continuaram como dois projetos independentes.

● Em dezembro de 2013, a organização Jenkins no GitHub tinha 567 membros do projeto e cerca de 1.100 repositórios públicos , em comparação com 32 membros do projeto do Hudson e 17 repositórios públicos.

Descrição das Caracteristicas● RSS / E-mail / IM Integração: Jenkins fornece meios para

construir os resultados por RSS ou e-mail para receber notificações em tempo real sobre as falhas.

● JUnit / reporting teste TestNG: relatórios de testes JUnit podem ser tabulados, resumidas e apresentadas com informações do histórico, como quando ele começou a quebrar, etc. História é plotada em um gráfico.

● Buils distribuidas: Jenkins pode distribuir as cargas de construção / teste para vários computadores. Isso permite que você obtenha o máximo proveito dessas estações de trabalho ociosas sentadas debaixo mesas dos desenvolvedores.

● Facil instalação: Apenas faça o dowload Java jenkins.war -jar, ou implantá-lo em um servlet. Sem instalação adicional, nenhum banco de dados.

● Facil configuração: Jenkins pode ser configurado iteiramente a partir de sua interface web amigavel.

● Links permanentes: Jenkins lhe dá URLs legíveis limpas para a maioria de suas páginas, incluindo alguns permalinks como "última versão" / "build mais recente sucesso", de modo que eles podem ser facilmente ligado a partir de outros lugares.

Descrição das CaracteristicasFile fingerprinting: Jenkins mantêm o historico de qual build produziu qual jars, qual build usa quais jars e assim por diante.

Isso funciona mesmo para jars que são produzidos fora Jenkins, e é ideal para projetos que precisam rastrear dependência.

Apoio Plugin: Jenkins pode ser estendido via plugins de terceiros. Você pode escrever plugins para fazer ferramentas de apoio Jenkins / processos que sua equipe usa.

Vantagens● Vantagens

○ Builds periódicos○ Testes Automatizados○ Builds em ambientes diferentes do desenvolvedor○ Possibilita analize de código○ Possibilita customização○ Reduzir retrabalho○ Reduzir custo da entrega○ Identificar erros mais cedo○ Fácil de operar e configurar○ Comunidade ativa○ UI agradável○ O jenkins integra com outras ferramentas através de plugins existentes na própria aplicação.

Ferramentas Concorrentes

Hudson

● Open Source, e tem suporte da própria Oracle.

● As funcionalidades dele são praticamente as mesmas do Jenkins.

● O suporte da Oracle pode ser um ponto relevante na escolha.

● O suporte da Oracle pro Hudson não saiu nada de novo desde Dezembro / 2010

TeamCity - JetBrains

● Desenvolvido pela JetBrains;● Ramos para Git e Mercurial;● integrações e extensibilidade com Xcode, Visual

Studio e Amazon EC2;● Tem integração com algumas IDE’s como: Eclipse,

Visual Studio, IntelliJ IDEA, RubyMine, PyCharm, PhpStorm, WebStorm;

● Existem mais de 50 plugins.

Bamboo – Atlassian

● Desenvolvido pela Atlassian;

● Ele é bem popular e tem ótimos recursos;

● Tem uma ótima integração com o Jira;

● Ele também tem integração com algumas IDE’s como: IntelliJ IDEA, Eclipse, e Visual Studio

Drone.io

● Possui suporte a diversas linguagens, como: C, C++, Go, Java, JavaScript, PHP, Ruby, etc;

● Integra perfeitamente com o Github, Bitbucket e Google Code;

● Também se integra com serviços de terceiros, como: Heroku, dotCloud, Google AppEngine, etc...

Travis CI

● O Travis CI é um serviço de Integração Contínua na nuvem que pode ser conectado a repositórios no GitHub;

● Ele é gratuito para repositórios públicos e pago para repositórios privados;

● Possui suporte a diversas linguagens, como: C, C++, Go, Java, JavaScript, Node.js, Objective-C, PHP, Python, Ruby, etc.

Apache Continuum

● Open Source, Desenvolvido pela Apache, ele roda num Servlet Container qualquer, como o Tomcat;

● Ele baixa o código alterado do controle de versão (SVN, CVS, VSS, Mercurial e outros), roda o build, distribui no servidor de aplicação (ou servlet container) e roda os testes unitários;

● Se você não usa o Maven, é melhor não utilizar o Continuum;

● Não se integra nem com Eclipse, nem com Netbeans.

Team Foundation Server

● Desenvolvido pela Microsoft;● Se integra muito bem com o Visual Studio;● A principal diferença entre ele e as outras ferramentas é

que o TFS já é o kit todo: o controle de versão, o servidor de integração contínua e um project tracker;

● Roda em Windows.

CruiseControl.rb

● Open Source;● Desenvolvido pela ThoughtWorks;● Foi feito especialmente para se integrar com o Git;● Foi criado para trabalhar com projetos Ruby.

CruiseControl

● Open Source;● Tem varios Plugins;● Integração com Eclipse e envio de e-mails;● A parte boa dele é o dashboard;

Gráfico de Popularidade

Gráfico de Popularidade

Gráfico de Popularidade

Workflow com CI

Usando Jenkins em um projeto RoR

Intalando o jenkinsapt-get update

apt-get upgrade

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

echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list

apt-get update

apt-get install -y jenkins

/etc/init.d/jenkins start

http://server-ip:8080.

Intalando nginx

apt-get -y install nginx

/etc/init.d/nginx start

Criar arquivo no caminho /etc/nginx/sites-enabled/jenkins e colar o codigo seguinte fazendo as alterações necessarias.

Intalando nginxupstream jenkins {

server 127.0.0.1:8080;

}

server {

listen 80 default;

server_name ci.my_site.com;

try_files $uri @jenkins;

location @jenkins {

proxy_pass http://jenkins;

proxy_set_header X-Forwarded-For

$proxy_add_x_forwarded_for;

proxy_set_header Host $http_host;

proxy_redirect off;

}

location ~ /job/\w+/build { root /var/cache/.jenkins/war; try_files $uri @jenkins; }

location / { root /var/cache/jenkins/war/; try_files $uri @jenkins; }}

Quem usa Jenkins

Referências

http://zeroturnaround.comhttp://jenkins-ci.orghttp://rubyonrails.orghttp://nginx.orghttps://github.com/presidentbeef/brakeman