test driven infrastructure na globo.com
DESCRIPTION
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.TRANSCRIPT
![Page 1: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/1.jpg)
globo.comTest DrivenInfrastructure naGlobo.comFernando Carolo e Rogério SchneiderQCon São Paulo 2014
![Page 2: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/2.jpg)
Quinta-feira15:45
![Page 3: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/3.jpg)
![Page 4: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/4.jpg)
Uma turminha dobarulho aprontando
altas confusõesconfigurações
![Page 5: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/5.jpg)
Tudo era feito à mão
PARTE 1
![Page 6: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/6.jpg)
globo.com
Configurar um servidor era tarefa manual Instalar pacotes, editar arquivosAlguns arquivos foram para um share NFS /etc, /opt, /usr/local acertados manualmenteTrabalho repetido em vários hosts ClusterSSH, Capistrano
![Page 7: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/7.jpg)
globo.com
Uma maneira melhor
Infraestrutura = código
![Page 8: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/8.jpg)
globo.com
Mesmos princípios Controle de versão Pair programming e revisão de código Test driven development Integração contínua
![Page 9: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/9.jpg)
globo.com
Ferramentas Controle de versão Automação Máquinas virtuais Integração contínuaEscolha as suas
![Page 10: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/10.jpg)
globo.com
Ferramentas que usamos Controle de versão Git Automação Kickstart, Puppet Máquinas virtuais Vagrant Integração contínua JenkinsNão são as únicas
![Page 11: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/11.jpg)
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
![Page 12: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/12.jpg)
globo.com
Puppet Configuração do host para um projeto Pacotes de software Arquivos de configuração Controle do startup da máquina
![Page 13: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/13.jpg)
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
![Page 14: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/14.jpg)
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
![Page 15: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/15.jpg)
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
![Page 16: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/16.jpg)
Aprendizado
PARTE 2
![Page 17: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/17.jpg)
globo.com
Puppet é funcional Módulos descrevem o estado desejado Pense em makefile, não em scriptDependências devem ser explícitas Use requires e anchorsDesfazer é difícil Usar ensure => absent fica confuso Começar do zero é mais fácil
![Page 18: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/18.jpg)
globo.com
Unifique o código do seu projeto Aplicação + módulos puppet Versionamento em conjuntoIsole os parâmetros do código Use defines separados ou hieraCódigo legível é código bonito puppet-lint
![Page 19: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/19.jpg)
globo.com
Separe os ambientes no Foreman Versões para desenvolvimento, QA, produçãoCuidado com módulos compartilhados Testes e eterna vigilância Librarian-puppet pode ajudarDecida como aplicar as mudanças Use --onetime ao invés de rodar o agente como daemon
![Page 20: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/20.jpg)
Infraestrutura =código dos outros
PARTE 3
![Page 21: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/21.jpg)
globo.com
Mudanças acontecem o tempo todo Em outras lugares Principalmente em produçãoNem tudo está do jeito desejado Serviços externos, bases de dados, servidores de arquivos, ACLs, etcPrecisamos de testes de aceitação
![Page 22: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/22.jpg)
globo.com
Nossa solução: TDIFerramenta para rodar testes sobre a infra DNS, filesystem, HTTP, etcPrática de TDD Escreva o teste, rode, corrija os errosPlano 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
![Page 23: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/23.jpg)
globo.com
TDI Ruby – gem install tdi Open source (github) Beta Curta e compatilhe Pull requests são bem-vindos
![Page 24: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/24.jpg)
Demonstração
PARTE 4
![Page 25: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/25.jpg)
globo.com
Serviços externos via HTTP URLs de serviços públicos na internet
![Page 26: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/26.jpg)
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 } } }}
![Page 27: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/27.jpg)
globo.com
![Page 28: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/28.jpg)
globo.com
Acessos de rede Conexões em portas específicas
![Page 29: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/29.jpg)
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] } } }}
![Page 30: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/30.jpg)
globo.com
![Page 31: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/31.jpg)
Perguntas
FINAL
![Page 32: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/32.jpg)
CRÉDITOS
![Page 33: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/33.jpg)
globo.com
Fernando Carolo [email protected]
Rogério Schneider [email protected]
TDI github.com/globocom/tdi
rubygems.org/gems/tdi
![Page 34: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/34.jpg)
globo.com
Kickstart fedoraproject.org/wiki/Anaconda/Kickstart
Puppet puppetlabs.com/puppet/puppet-open-source
Foreman theforeman.org
Vagrant www.vagrantup.com
![Page 35: Test Driven Infrastructure na Globo.com](https://reader034.vdocuments.com.br/reader034/viewer/2022042602/559453b31a28abd94f8b47b7/html5/thumbnails/35.jpg)
Obrigado