globo
.com
Test Driven
Infrastructure na
Globo.com
FernandoCaroloeRogérioSchneider
QConSãoPaulo2014
Quinta-feira
15:45
Uma turminha do
barulho aprontando
altas confusões
configurações
Tudo era feito à mão
!
!
PARTE 1
globo
.com
Configurar um servidor era tarefa manual
Instalar pacotes, editar arquivos
Alguns arquivos foram para um share N...
globo
.com
Uma maneira melhor
Infraestrutura = código
globo
.com
Mesmos princípios
Controle de versão
Pair programming e revisão de código
Test driven development
Integração co...
globo
.com
Ferramentas
Controle de versão
Automação
Máquinas virtuais
Integração contínua
Escolha as suas
globo
.com
Ferramentas que usamos
Controle de versão Git
Automação Kickstart, Puppet
Máquinas virtuais Vagrant
Integração ...
globo
.com
Kickstart
Instalação padronizada de SO
Imagens para boot via PXE
Apenas os pacotes básicos
Serviços essenciais ...
globo
.com
Puppet
Configuração do host para um projeto
Pacotes de software
Arquivos de configuração
Controle do startup da m...
globo
.com
Foreman
Front-end para o puppet master
Atribuição de papéis a cada host
Gerência de certificados do puppet
Statu...
globo
.com
Vagrant
Gerenciamento de máquinas virtuais
Criação de VMs por script
Compatível com Virtualbox, VMWare, etc
Amb...
globo
.com
Jenkins
Integração contínua também para infra
Testes unitários nos módulos puppet
Montagem de ambientes com Vag...
Aprendizado
!
!
PARTE 2
globo
.com
Puppet é funcional
Módulos descrevem o estado desejado
Pense em makefile, não em script
Dependências devem ser e...
globo
.com
Unifique o código do seu projeto
Aplicação + módulos puppet
Versionamento em conjunto
Isole os parâmetros do cód...
globo
.com
Separe os ambientes no Foreman
Versões para desenvolvimento, QA, produção
Cuidado com módulos compartilhados
Te...
Infraestrutura =
código dos outros
!
!
PARTE 3
globo
.com
Mudanças acontecem o tempo todo
Em outros lugares
Principalmente em produção
Nem tudo está do jeito desejado
Se...
globo
.com
Nossa solução: TDI
Ferramenta para rodar testes sobre a infra
DNS, filesystem, HTTP, etc
Prática de TDD
Escreva ...
globo
.com
TDI
Ruby – gem install tdi
Open source (github)
Beta
Curta e compatilhe
Pull requests são bem-vindos
Demonstração
!
!
PARTE 4
globo
.com
Serviços externos via HTTP
URLs de serviços públicos na internet
globo
.com
{
"app": {
"desc": "Test service dependencies",
"http": {
"http://globoesporte.globo.com/healthcheck": {
"match...
globo
.com
globo
.com
Acessos de rede
Conexões em portas específicas
globo
.com
{
"app": {
"desc": "Test network connectivity",
"acl": {
"port": 80,
"www.globo.com": { },
"globoesporte.globo....
globo
.com
Perguntas
!
!
FINAL
CRÉDITOS
globo
.com
Fernando Carolo
carolo@corp.globo.com
Rogério Schneider
rogerio.schneider@corp.globo.com
!
TDI
github.com/globo...
globo
.com
Kickstart
fedoraproject.org/wiki/Anaconda/Kickstart
Puppet
puppetlabs.com/puppet/puppet-open-source
Foreman
the...
Obrigado
Test Driven Infrastructure na Globo.com
Próximos SlideShares
Carregando em…5
×

Test Driven Infrastructure na Globo.com

692 visualizações

Publicada em

As técnicas de TDD buscam garantir que, ao longo de sua evolução, um sistema continue atendendo a todos os seus requisitos e respeitando suas interfaces públicas. Entretanto, ao ser colocado em produção esse sistema vai depender de diversos serviços de infraestrutura, como rede, storage, caching e outros serviços e sistemas remotos. Como assegurar que essas dependências também estão respeitando as especificações originais?

Nesta apresentação, mostramos a importância de realizar testes sobre a infraestrutura, desde os ambientes de desenvolvimento e QA até os ambientes de produção, aplicando os princípios do TDD a toda a cadeia de dependências de um sistema. Vamos também mostrar exemplos práticos com as ferramentas de testes usadas na Globo.com.

Publicada em: Internet
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
692
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
14
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Test Driven Infrastructure na Globo.com

  1. 1. globo .com Test Driven Infrastructure na Globo.com FernandoCaroloeRogérioSchneider QConSãoPaulo2014
  2. 2. Quinta-feira 15:45
  3. 3. Uma turminha do barulho aprontando altas confusões configurações
  4. 4. Tudo era feito à mão ! ! PARTE 1
  5. 5. globo .com Configurar um servidor era tarefa manual Instalar pacotes, editar arquivos Alguns arquivos foram para um share NFS /etc, /opt, /usr/local acertados manualmente Trabalho repetido em vários hosts ClusterSSH, Capistrano
  6. 6. globo .com Uma maneira melhor Infraestrutura = código
  7. 7. globo .com Mesmos princípios Controle de versão Pair programming e revisão de código Test driven development Integração contínua
  8. 8. globo .com Ferramentas Controle de versão Automação Máquinas virtuais Integração contínua Escolha as suas
  9. 9. globo .com Ferramentas que usamos Controle de versão Git Automação Kickstart, Puppet Máquinas virtuais Vagrant Integração contínua Jenkins Não são as únicas
  10. 10. globo .com Kickstart Instalação padronizada de SO Imagens para boot via PXE Apenas os pacotes básicos Serviços essenciais (resolver, ntp, ldap) Diferenças só por conta do hardware
  11. 11. globo .com Puppet Configuração do host para um projeto Pacotes de software Arquivos de configuração Controle do startup da máquina
  12. 12. globo .com Foreman Front-end para o puppet master Atribuição de papéis a cada host Gerência de certificados do puppet Status de cada host
  13. 13. globo .com Vagrant Gerenciamento de máquinas virtuais Criação de VMs por script Compatível com Virtualbox, VMWare, etc Ambiente completo no seu notebook
  14. 14. globo .com Jenkins Integração contínua também para infra Testes unitários nos módulos puppet Montagem de ambientes com Vagrant Instalação e testes do projeto
  15. 15. Aprendizado ! ! PARTE 2
  16. 16. globo .com Puppet é funcional Módulos descrevem o estado desejado Pense em makefile, não em script Dependências devem ser explícitas Use requires e anchors Desfazer é difícil Usar ensure => absent fica confuso Começar do zero é mais fácil
  17. 17. globo .com Unifique o código do seu projeto Aplicação + módulos puppet Versionamento em conjunto Isole os parâmetros do código Use defines separados ou hiera Código legível é código bonito puppet-lint
  18. 18. globo .com Separe os ambientes no Foreman Versões para desenvolvimento, QA, produção Cuidado com módulos compartilhados Testes e eterna vigilância Librarian-puppet pode ajudar Decida como aplicar as mudanças Use --onetime ao invés de rodar o agente como daemon
  19. 19. Infraestrutura = código dos outros ! ! PARTE 3
  20. 20. globo .com Mudanças acontecem o tempo todo Em outros lugares Principalmente em produção Nem tudo está do jeito desejado Serviços externos, bases de dados, servidores de arquivos, ACLs, etc Precisamos de testes de aceitação
  21. 21. globo .com Nossa solução: TDI Ferramenta para rodar testes sobre a infra DNS, filesystem, HTTP, etc Prática de TDD Escreva o teste, rode, corrija os erros Plano de teste num arquivo JSON Pode ser gerado no build da aplicação Ajustado ao papel de cada host Torna-se teste de aceitação da infraestrutura
  22. 22. globo .com TDI Ruby – gem install tdi Open source (github) Beta Curta e compatilhe Pull requests são bem-vindos
  23. 23. Demonstração ! ! PARTE 4
  24. 24. globo .com Serviços externos via HTTP URLs de serviços públicos na internet
  25. 25. globo .com { "app": { "desc": "Test service dependencies", "http": { "http://globoesporte.globo.com/healthcheck": { "match": "WORKING" }, "http://api.sde.globo.com": { "code" : 301 }, "https://api.sde.globo.com": { "code" : 401 }, "https://api.cartola.globo.com/mercado/status.json": { "code" : 200 }, "https://api.cartola.globo.com/wrong-url": { "code" : 200 } } } }
  26. 26. globo .com
  27. 27. globo .com Acessos de rede Conexões em portas específicas
  28. 28. globo .com { "app": { "desc": "Test network connectivity", "acl": { "port": 80, "www.globo.com": { }, "globoesporte.globo.com": { }, "g1.globo.com": { }, "www.example.com": { "port": 9999 }, "localhost": { "port": [22, 80, 65535] } } } }
  29. 29. globo .com
  30. 30. Perguntas ! ! FINAL
  31. 31. CRÉDITOS
  32. 32. globo .com Fernando Carolo carolo@corp.globo.com Rogério Schneider rogerio.schneider@corp.globo.com ! TDI github.com/globocom/tdi rubygems.org/gems/tdi
  33. 33. globo .com Kickstart fedoraproject.org/wiki/Anaconda/Kickstart Puppet puppetlabs.com/puppet/puppet-open-source Foreman theforeman.org Vagrant www.vagrantup.com
  34. 34. Obrigado

×