2. 3/17/13 2
●
As soluções de CI/CD são uma parte vital de qualquer time agil
pois ajudam a reforçar os ideais de desenvolvimento agil
●
Jenkins, um sistema de build continuo, permite as equipes focar
o trabalho em desenvolvimento automatizando o processo de
testes, o gerenciamento de artefatos e os processos de
implantação
●
A flexibilidade e as funcionalidades do jenkins permitem o
acoplamento em diversos ambientes e agilizam o processo de
desenvolvimento para todas as partes envolvidas
Jenkins
3. 3/17/13 Red Hat Confidential 3
●
O que é?
●
Quais os benefícios?
Integração Continua
5. 5
●
O que é?
●
Onde se encaixa?
●
Por que eu deveria usar?
●
O que eu posso fazer?
●
Como funciona?
●
Onde é usado?
●
Como começar?
Jenkins
6. 6
“Continuous Integration is a software development practice where
members of a team integrate their work frequently, usually each
person integrates at least daily - leading to multiple integrations
per day. Each integration is verified by an automated build
(including test) to detect integration errors as quickly as possible”
– Martin Fowler
Integração Continua
7. 7
Frequentemente (idealmente a cada commit), o sistema é:
●
Integrado – Todas as mudanças realizadas até o momento são
adicionadas ao projeto.
●
Construido – O código é compilado em um executável ou pacote.
●
Testado – Suites de testes são executadas.
●
Arquivado – Versionado e armazenado
●
Deployed - Instalado em um sistema onde os desenvolvedores
podem utilizá-lo.
CI – O que realmente significa?
9. 9
●
Detecção imediata de bugs
●
Nenhum passo de integração no ciclo de vida
●
Um sistema implantável em qualquer ponto do ciclo de vida
●
Registro de evolução do projeto
Benefícios CI
10. 10
●
Repositórios de código fonte - SVN, Mercurial, Git
●
Sistemas de build continuo - Jenkins, Bamboo, Cruise Control
●
Frameworks de teste - JUnit,Cucumber, CppUnit
●
Repositórios de artefatos - Nexus, Artifactory, Archiva
CI/CD ferramentas
11. 11
“Continuous Delivery is a software development discipline where you build
software in such a way that the software can be released to production at any
time.
You’re doing continuous delivery when:
●
Your software is deployable throughout its lifecycle
●
Your team prioritizes keeping the software deployable over working on new
features
●
Anybody can get fast, automated feedback on the production readiness of their
systems any time somebody makes a change to them
●
You can perform push-button deployments of any version of the software to any
environment on demand” – Martin Fowler
Continuous Delivery
12. 12
“You achieve continuous delivery by continuously integrating the
software done by the development team, building executables,
and running automated tests on those executables to detect
problems. Furthermore you push the executables into
increasingly production-like environments to ensure the software
will work in production. To do this you use a Deployment
Pipeline.” – Martin Fowler
Continuous Delivery
13. 13
Entrega contínua é alcançado através do deployment pipeline. O
deployment pipeline é composto por três componentes: visibidade,
feedback e deploy contínuo
●
Visibilidade – Todos os aspectos do sistema de entrega incluindo
building, deploying, testes, e release de versão são visiveís para todos
os membros da equipe promovendo assim a colaboração
●
Feedback – Team members tomam conhecimento dos problemas o mais
rápido possível assim são capazes de corrigi-los mais rapidamente
●
Deploy continuo – Através de um processo totalmente automatizado,
você pode realizar o deploy e lançar qualquer versão de software para
qualquer ambiente
Deployment pipeline
14. 14
●
2005 - Hudson foi lançado por Kohsuke Kawaguchi da Sun
Microsystems
●
2010 – Oracle comprou a Sun Microsystems
●
Devido a uma disputa pela patente do nome, Hudson foi
renomeado para Jenkins
●
Oracle continuou o desenvolvimento do Hudson
Jenkins - História
15. 15
●
Jenkins é altamente configuravél
●
O desenvolvimento de plugins adicionais prove ainda mais
flexibilidade
●
Combinando Jenkins com Ant, Gradle, ou outra ferramenta de
automação de build, as possibilidades são ilimitadas
●
Flexibilidade, maturidade, comunidade
Por que Jenkins? Flexibilidade
16. 16
●
Jenkins está sob a licença MIT
●
Grande suporte da comunidade e documentação completa
●
Facilidade para escrever plugins
●
Algo errado com o jenkins? Você pode consertar!
Por que Jenkins? Free/OSS
17. 17
●
Gerar relatório de testes
●
Integração com diferentes sistemas de controle de versão
●
Realizar o Push para vários repositórios de artefatos
●
Deploys diretamente para ambiente de produção ou teste
●
Notificar os stakeholders do status do build
●
…e muito mais
O que o Jenkins pode fazer?
18. 18
Quando configurar um projeto jenkins, você tem as seguintes opções:
●
Associar servidor de controle de versão
●
Triggering builds – Iniciar um job assim que outro job terminar, Periodico,
consultar SCM por modificações
●
Execução de shell scripts, bash scripts, Ant targets e Maven targets
●
Arquivamento de artefatos
●
Publicar resultados de testes JUnit and Javadocs
●
Notificações por email
como mencionado antes, plugins expandem as funcionalidades ainda
mais
Como o Jenkins funciona - Setup
19. 19
●
Uma vez criado o projeto no jenkins, todos os builds futuros serão
automáticos.
- Building
●
Jenkins executa o build em um executer
- por default, Jenkins fornece um executer por core no servidor de build
●
Jenkins também tem o conceito de servidores de build slave
- Útil para o building em diferentes arquiteturas
- Distribuição de carga
Como o Jenkins funciona - Building
20. 20
Jenkins vem com recursos básicos de relatórios
●
Monitorando o status do build
- Último success and failure
- “Weather” – Build trend
●
Estes podem ser bastante melhorados com o uso de plugins de pré-build
- Cobertura de testes unitários
- Tendência de resultado de teste
- Findbugs, Checkstyle, PMD
Como o Jenkins funciona -
Relatórios
22. 22
●
A página principal fornece um resumo dos projetos
●
Quick view de:
- O que está em building (“No builds in the queue”)
- Status do Build Executor (Ambos “Idle”)
- Status dos projetos
Jenkins Main Page
24. 24
●
Página de status do projeto fornece mais detalhes de um
determinado projeto
- O status dos últimos builds
- Gráficos
- Dependências
Jenkins Project Status
25. 25
O sistema de plugins do Jenkins permite uma ampla gama de recursos, incluindo (mas certamente
não limitado a)
●
SCM - Mercurial, Git, Subversion
●
Teste - Selenium, Windmill, TestLink
●
Notificações - IRC, Twitter, Jabber
●
Relatórios - Doxygen, PMD, Findbugs
●
Artifact repository - Artifactory, Archiva, Nexus
●
Triggers - Jabber, Directory Watchers
●
Integração Externa - GitHub, Bugzilla, JIRA
●
E o mais importante – The CI Game. Um jogo onde os desenvolvedores competem entre si
objetivando desenvolver o mais estável e bem testado código
Melhorando o Jenkins
27. 27
Há também soluções cloud-based que podem fornecer uma
instância Jenkins
●
- Cloudbees - http://www.cloudbees.com/
●
- bitnami - http://bitnami.com/stack/jenkins
Jenkins na nuvem
28. 28
Jenkins tem dois tipos de release
●
Weekly release
- Recursos e bug fixes semanais
●
Long-Term Support (LTS) release
- Atualizações de 3 meses em 3 meses
- Usa uma versão “stable but old”
- Mudanças são limitadas a bug fixes importantes
Releases Jenkins
29. 29
●
Para um time agíl, Jenkins prove a base para uma solução CI/CD
●
Jenkins suporta os princípios ageís provendo entrega continua
de software
●
A extensibilidade do Jenkins permite adaptação para diferentes
ambiente pré-existentes
Jenkins e o Agile
30. 30
●
Como uma parte integral de um solução CI/CD, Jenkins não é de forma
alguma o único componente
●
Para um solução CI/CD funcionar, um repositório comum de código fonte
precisa existir
●
Uma base de dados de artefatos precisa existir, para as entregas
poderem ser efetuadas em iterações passadas
●
O último passo em um processo CI é o deploy dos componentes do build
●
… e nada disso importa se os desenvolvedores não usam o sistema;
processos precisam garantir que o sistema seja usado como pretendido
Jenkins, CI/CD e Agile
31. 31
●
Continuous integration é uma necessidade em projetos complexos
devido aos benefícios que prove considerando a detecção prévia de
problemas
●
Uma boa solução CI/CD deve ser flexivel o bastante para acoplar nos
ambientes pré-existentes e prover todos os recursos que o time espera
●
Jenkins, pode ser parte integral de um solução de CI/CD devido ao seu
conjunto de recursos e a extensibilidade que o sistemas de plugins prove
Conclusão
32. 32
●
Continuous Integration – Martin Fowler
●
- http://www.martinfowler.com/articles/continuousIntegration.html
●
Continuous Delivery – Martin Fowler
●
- https://martinfowler.com/bliki/ContinuousDelivery.html
●
Hudson
●
- http://hudson-ci.org/
●
Jenkins
●
- https://jenkins.io/
●
What is Continuous Integration
●
- https://www.thoughtworks.com/continuous-integration
●
Duval Paul (2012). "Continuous Delivery: Patterns and Anti-Patterns in Software Lifecycle" (PDF). Refcardz. Retrieved October 9,
2015.
Referências