Agenda
Stacks
Continuous Integration
Docker
Dockerize Continuous Integration
Docker + Jenkins
Devtools
Stacks
Stacks
Stacks
Stacks
Stacks
Stacks
Stacks
Stacks
Stacks
Stacks
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
Continuous Integration
Maintain a code repository Automate the build Make the build self-testing
Everyone commits to the baseline every day Every commit (to baseline) should be built Test in a clone of the production environment
Make it easy to get the latest deliverables Everyone can see the results of the latest build
Keep the build fast Automate deployment
Continuous Integration
Maintain a code repository Automate the build Make the build self-testing
Everyone commits to the baseline every day Every commit (to baseline) should be built Test in a clone of the production environment
Make it easy to get the latest deliverables Everyone can see the results of the latest build
Keep the build fast Automate deployment
Continuous Integration
Maintain a code repository Automate the build Make the build self-testing
Everyone commits to the baseline every day Every commit (to baseline) should be built Test in a clone of the production environment
Make it easy to get the latest deliverables Everyone can see the results of the latest build
Keep the build fast Automate deployment
Continuous Integration
Maintain a code repository Automate the build Make the build self-testing
Everyone commits to the baseline every day Every commit (to baseline) should be built Test in a clone of the production environment
Make it easy to get the latest deliverables Everyone can see the results of the latest build
Keep the build fast Automate deployment
Continuous Integration
Maintain a code repository Automate the build Make the build self-testing
Everyone commits to the baseline every day Every commit (to baseline) should be built Test in a clone of the production environment
Make it easy to get the latest deliverables Everyone can see the results of the latest build
Keep the build fast Automate deployment
Continuous Integration
Maintain a code repository Automate the build Make the build self-testing
Everyone commits to the baseline every day Every commit (to baseline) should be built Test in a clone of the production environment
Make it easy to get the latest deliverables Everyone can see the results of the latest build
Keep the build fast Automate deployment
Continuous Integration
Maintain a code repository Automate the build Make the build self-testing
Everyone commits to the baseline every day Every commit (to baseline) should be built Test in a clone of the production environment
Make it easy to get the latest deliverables Everyone can see the results of the latest build
Keep the build fast Automate deployment
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Docker
Docker
Docker
PRODUCTION READY??
Docker
Docker
Docker
Docker
Dockerize Continuous Integration
Dockerize Continuous Integration
Dockerize Continuous Integration
Dockerize Continuous Integration
Dockerize Continuous Integration
Dockerize Continuous Integration
Dockerize Continuous Integration
Dockerize Continuous Integration
Dockerize Continuous Integration
Docker + Jenkins = Amor
empacotamento de aplicações
FPM
https://github.com/jordansissel/fpm build.sh
$FPM_OPTS
Docker + Jenkins = Amor
empacotamento de aplicações
Especialmente útil para linguagens que sem facilidades para empacotar Desacoplamento entre a aplicação e o
ambiente Script de empacotamento no controle de versão Sem conflito entre dependências
Container precisa de acesso ao workspace
Nem sempre é a melhor solução Cuidado com a arquitetura em que ocorre o empacotamento
Docker + Jenkins = Amor
teste e análise uniformes
Docker + Jenkins = Amor
teste e análise uniformes
Ideal para ambientes de CI com mutas necessidades diferentes Liberdade na escolha da sua pilha de
testes Ambiente de integração contínua organizado Fácil reprodução e manutenção do
ambiente de testes Código de execução dos testes no
controle de versão
Container precisa de acesso ao workspace
CI Server precisa ter permissão pra manipular artefatos
É uma “caixa preta” se os devs não conhecerem Docker
Manutenção do Docker host
Docker + Jenkins = Amor
Jenkins slaves com containers
Docker + Jenkins = Amor
Jenkins slaves com containers
Funciona bem para casos onde não há ambiente sob demanda Mais rápido do que usar VMs Escala facilmente com muito jobs Permite usar containers como artefatos de build
Documentação escassa
Cada job necessita de uma imagem cadastrada
Volumes para os caches de dependências
Container precisa de acesso ao workspace
CI Server/Container precisa ter permissão pra manipular artefatos
Docker + Jenkins = Amor
testes de integração
integração contínua de cookbooks
Docker + Jenkins = Amor
driver_plugin: docker driver_config:
socket: tcp://docke.host:5000 dockerfile: test/Dockerfile
http://kitchen.ci/
[email protected] @lonefreak