globo
.com
Test Driven
Infrastructure na
Globo.com
Fernando Carolo e Rogério Schneider
QCon São Paulo 2014
Quinta-feira
15:45
Uma turminha do
barulho aprontando
altas confusões
configurações
Tudo era feito à mão
!
!
PARTE 1
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
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 contínua
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 contínua
Jenkins
Não são as únicas
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
globo
.com
Puppet
Configuração do host para um projeto
Pacotes de software
Arquivos de configuração
Controle do startup da máquina
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
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
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
globo
.com
Aprendizado
!
!
PARTE 2
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
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
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
globo
.com
Infraestrutura =
código dos outros
!
!
PARTE 3
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
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
globo
.com
TDI
Ruby – gem install tdi
Open source (github)
Beta
Curta e compatilhe
Pull requests são bem-vindos
globo
.com
Demonstração
!
!
PARTE 4
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": "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
}
}
}
}
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.com": { },
"g1.globo.com": { },
"www.example.com": {
"port": 9999
},
"localhost": {
"port": [22, 80, 65535]
}
}
}
}
globo
.com
globo
.com
Perguntas
!
!
FINAL
CRÉDITOS
Fernando Carolo
[email protected]
Rogério Schneider
[email protected]
!
TDI
github.com/globocom/tdi
rubygems.org/gems/tdi
globo
.com
Kickstart
fedoraproject.org/wiki/Anaconda/Kickstart
Puppet
puppetlabs.com/puppet/puppet-open-source
Foreman
theforeman.org
Vagrant
www.vagrantup.com
globo
.com
Obrigado
Download

Test Driven Infrastructure na Globo.com