Slides

Transcription

Slides
Integração Contínua com containers Docker
Fabricio Leotti
fabricio.leotti@gmail.com
@lonefreak
Agenda
Stacks
Continuous Integration
Docker
Dockerize Continuous Integration
Docker + Jenkins
Devtools
Stacks
Stacks
Stacks
Stacks
Stacks
Stacks
Stacks
Stacks
Stacks
Stacks
Continuous Integration
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
Docker
Docker
Docker
Docker
PRODUCTION
READY??
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
build.sh
FPM
$FPM_OPTS
https://github.com/jordansissel/fpm
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
Container precisa de acesso ao
workspace
Liberdade na escolha da sua pilha de
testes
CI Server precisa ter permissão pra
manipular artefatos
Ambiente de integração contínua
organizado
É uma “caixa preta” se os devs não
conhecerem Docker
Fácil reprodução e manutenção do
ambiente de testes
Código de execução dos testes no
controle de versão
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
Docker + Jenkins = Amor
integração contínua de cookbooks
driver_plugin: docker
driver_config:
socket: tcp://docke.host:5000
dockerfile: test/Dockerfile
http://kitchen.ci/
fabricio.leotti@gmail.com
@lonefreak