43
Jenkins João Carlos Ottobboni

Integração Continua - Jenkins

Embed Size (px)

Citation preview

Page 1: Integração Continua - Jenkins

Jenkins

João Carlos Ottobboni

Page 2: Integração Continua - Jenkins

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.

Page 3: Integração Continua - Jenkins

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

Page 4: Integração Continua - Jenkins

Introdução

Page 5: Integração Continua - Jenkins

Antes da CI

Page 6: Integração Continua - Jenkins

Exemplo de CI

Page 7: Integração Continua - Jenkins

Exemplo de CI

Page 8: Integração Continua - Jenkins

Exemplo de CI

Page 9: Integração Continua - Jenkins

Exemplo de CI

Page 10: Integração Continua - Jenkins

Exemplo de CI

Page 11: Integração Continua - Jenkins

Exemplo de CI

Page 12: Integração Continua - Jenkins

Exemplo de CI

Page 13: Integração Continua - Jenkins

Exemplo de CI

Page 14: Integração Continua - Jenkins

Exemplo de CI

Page 15: Integração Continua - Jenkins

Exemplo de CI

Page 16: Integração Continua - Jenkins

Exemplo de CI

Page 17: Integração Continua - Jenkins

Exemplo de CI

Page 18: Integração Continua - Jenkins

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.

Page 19: Integração Continua - Jenkins

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.

Page 20: Integração Continua - Jenkins

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.

Page 21: Integração Continua - Jenkins

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.

Page 22: Integração Continua - Jenkins

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.

Page 23: Integração Continua - Jenkins

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.

Page 24: Integração Continua - Jenkins

Ferramentas Concorrentes

Page 25: Integração Continua - Jenkins

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

Page 26: Integração Continua - Jenkins

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.

Page 27: Integração Continua - Jenkins

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

Page 28: Integração Continua - Jenkins

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

Page 29: Integração Continua - Jenkins

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.

Page 30: Integração Continua - Jenkins

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.

Page 31: Integração Continua - Jenkins

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.

Page 32: Integração Continua - Jenkins

CruiseControl.rb

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

Page 33: Integração Continua - Jenkins

CruiseControl

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

Page 34: Integração Continua - Jenkins

Gráfico de Popularidade

Page 35: Integração Continua - Jenkins

Gráfico de Popularidade

Page 36: Integração Continua - Jenkins

Gráfico de Popularidade

Page 37: Integração Continua - Jenkins

Workflow com CI

Page 38: Integração Continua - Jenkins

Usando Jenkins em um projeto RoR

Page 39: Integração Continua - Jenkins

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.

Page 40: Integração Continua - Jenkins

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.

Page 41: Integração Continua - Jenkins

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; }}

Page 42: Integração Continua - Jenkins

Quem usa Jenkins

Page 43: Integração Continua - Jenkins

Referências

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