integração continua - jenkins
TRANSCRIPT
![Page 1: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/1.jpg)
Jenkins
João Carlos Ottobboni
![Page 2: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/2.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/3.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/4.jpg)
Introdução
![Page 5: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/5.jpg)
Antes da CI
![Page 6: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/6.jpg)
Exemplo de CI
![Page 7: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/7.jpg)
Exemplo de CI
![Page 8: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/8.jpg)
Exemplo de CI
![Page 9: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/9.jpg)
Exemplo de CI
![Page 10: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/10.jpg)
Exemplo de CI
![Page 11: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/11.jpg)
Exemplo de CI
![Page 12: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/12.jpg)
Exemplo de CI
![Page 13: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/13.jpg)
Exemplo de CI
![Page 14: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/14.jpg)
Exemplo de CI
![Page 15: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/15.jpg)
Exemplo de CI
![Page 16: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/16.jpg)
Exemplo de CI
![Page 17: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/17.jpg)
Exemplo de CI
![Page 18: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/18.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/19.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/20.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/21.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/22.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/23.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/24.jpg)
Ferramentas Concorrentes
![Page 25: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/25.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/26.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/27.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/28.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/29.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/30.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/31.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/32.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/33.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/34.jpg)
Gráfico de Popularidade
![Page 35: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/35.jpg)
Gráfico de Popularidade
![Page 36: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/36.jpg)
Gráfico de Popularidade
![Page 37: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/37.jpg)
Workflow com CI
![Page 38: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/38.jpg)
Usando Jenkins em um projeto RoR
![Page 39: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/39.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/40.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/41.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/42.jpg)
Quem usa Jenkins
![Page 43: Integração Continua - Jenkins](https://reader030.vdocuments.mx/reader030/viewer/2022013102/55a67e201a28ab776f8b46c4/html5/thumbnails/43.jpg)
Referências
http://zeroturnaround.comhttp://jenkins-ci.orghttp://rubyonrails.orghttp://nginx.orghttps://github.com/presidentbeef/brakeman