test driven infrastructure na globo - ?· barulho aprontando altas confusões configurações....

Download Test Driven Infrastructure na Globo - ?· barulho aprontando altas confusões configurações. Tudo…

Post on 24-Nov-2018

212 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • globo .comTest Driven Infrastructure na Globo.comFernando Carolo e Rogrio Schneider QCon So Paulo 2014

  • Quinta-feira 15:45

  • Uma turminha do barulho aprontando

    altas confuses configuraes

  • Tudo era feito mo !

    !

    PARTE 1

  • 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 vrios hosts ClusterSSH, Capistrano

  • globo .com

    Uma maneira melhor Infraestrutura = cdigo

  • globo .com

    Mesmos princpios Controle de verso Pair programming e reviso de cdigo Test driven development Integrao contnua

  • globo .com

    Ferramentas Controle de verso Automao Mquinas virtuais Integrao contnua Escolha as suas

  • globo .com

    Ferramentas que usamos Controle de verso Git Automao Kickstart, Puppet Mquinas virtuais Vagrant Integrao contnua Jenkins No so as nicas

  • globo .com

    Kickstart Instalao padronizada de SO Imagens para boot via PXE Apenas os pacotes bsicos Servios essenciais (resolver, ntp, ldap) Diferenas s por conta do hardware

  • globo .com

    Puppet Configurao do host para um projeto Pacotes de software Arquivos de configurao Controle do startup da mquina

  • globo .com

    Foreman Front-end para o puppet master Atribuio de papis a cada host Gerncia de certificados do puppet Status de cada host

  • globo .com

    Vagrant Gerenciamento de mquinas virtuais Criao de VMs por script Compatvel com Virtualbox, VMWare, etc Ambiente completo no seu notebook

  • globo .com

    Jenkins Integrao contnua tambm para infra Testes unitrios nos mdulos puppet Montagem de ambientes com Vagrant Instalao e testes do projeto

  • Aprendizado !

    !

    PARTE 2

  • globo .com

    Puppet funcional Mdulos descrevem o estado desejado Pense em makefile, no em script Dependncias devem ser explcitas Use requires e anchors Desfazer difcil Usar ensure => absent fica confuso Comear do zero mais fcil

  • globo .com

    Unifique o cdigo do seu projeto Aplicao + mdulos puppet Versionamento em conjunto Isole os parmetros do cdigo Use defines separados ou hiera Cdigo legvel cdigo bonito puppet-lint

  • globo .com

    Separe os ambientes no Foreman Verses para desenvolvimento, QA, produo Cuidado com mdulos compartilhados Testes e eterna vigilncia Librarian-puppet pode ajudar Decida como aplicar as mudanas Use --onetime ao invs de rodar o agente como daemon

  • Infraestrutura = cdigo dos outros

    !

    !

    PARTE 3

  • globo .com

    Mudanas acontecem o tempo todo Em outros lugares Principalmente em produo Nem tudo est do jeito desejado Servios externos, bases de dados, servidores de arquivos, ACLs, etc Precisamos de testes de aceitao

  • globo .com

    Nossa soluo: TDI Ferramenta para rodar testes sobre a infra DNS, filesystem, HTTP, etc Prtica de TDD Escreva o teste, rode, corrija os erros Plano de teste num arquivo JSON Pode ser gerado no build da aplicao Ajustado ao papel de cada host Torna-se teste de aceitao da infraestrutura

  • globo .com

    TDI Ruby gem install tdi Open source (github) Beta Curta e compatilhe Pull requests so bem-vindos

  • Demonstrao !

    !

    PARTE 4

  • globo .com

    Servios externos via HTTP URLs de servios pblicos 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 } } } }

    http://globoesporte.globo.com/healthcheckhttp://api.sde.globo.comhttps://api.sde.globo.comhttps://api.cartola.globo.com/mercado/status.jsonhttps://api.cartola.globo.com/wrong-url

  • globo .com

  • globo .com

    Acessos de rede Conexes em portas especficas

  • 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] } } } }

    http://www.globo.comhttp://www.example.com

  • globo .com

  • Perguntas !

    !

    FINAL

  • CRDITOS

  • globo .com

    Fernando Carolo carolo@corp.globo.com Rogrio Schneider rogerio.schneider@corp.globo.com

    !

    TDI github.com/globocom/tdi rubygems.org/gems/tdi

    mailto:carolo@corp.globo.com

  • globo .com

    Kickstart fedoraproject.org/wiki/Anaconda/Kickstart Puppet puppetlabs.com/puppet/puppet-open-source Foreman theforeman.org

    Vagrant www.vagrantup.com

  • Obrigado