Upgrade to Pro — share decks privately, control downloads, hide ads and more …

James Bond – a CLI with permission to deploy

James Bond – a CLI with permission to deploy

O Bond é uma ferramenta command line que propõe um workflow de desenvolvimento e deployment de serviços abstraindo a infraestrutura de operação. Ele provê uma interface única para tecnologias como Kubernetes e Docker e faz com que Serviços, Replicação, Deployments e Replicação sejam cidadãos de primeira classe nas suas aplicações.

Guilherme Cavalcanti

October 06, 2016
Tweet

More Decks by Guilherme Cavalcanti

Other Decks in Technology

Transcript

  1. IS TDD dead? • DHH, criador do Rails, critica a

    nossa forma de fazer TDD • "Test induced damage": indirections, dependency injection, etc são motivadas pelos teste e não por necessidades de design • Rails e, em algum nível, o Rails Way, limita nossa visão em relação a TDD • Não é pq TDD não funciona em projetos Rails que a comunidade deve abandoná-lo
  2. v1.1 v1 v1.2 v3.1 v1.1 app 1 app 2 app

    3 v3.2 PRODUCTION SANDBOX PRODUCTION (CANARY) PRODUCTION STAGING PRODUCTION
  3. 9 CARACTERÍSTICAS DE MICROSERVIÇOS 
 – M. FOWLER {Organized around

    Business Capabilities Products not Projects Smart endpoints and dumb pipes Decentralized Governance Infrastructure Automation Design for failure Evolutionary Design (…)
  4. 12 FACTOR
 – HEROKU {One codebase tracked in revision control,

    many deploys Explicitly declare and isolate dependencies Store config in the environment Treat backing services as attached resources Strictly separate build and run stages (…)
  5. como tornamos isso realidade? • One codebase tracked in revision

    control, many deploys • Explicitly declare and isolate dependencies • Store config in the environment • Treat backing services as attached resources • Strictly separate build and run stages • (…) • Organized around Business Capabilities • Products not Projects • Smart endpoints and dumb pipes • Decentralized Governance • Infrastructure Automation • Design for failure • Evolutionary Design • (…)
  6. exemplo • deployment • cidadão de primeira classe apiVersion: extensions/v1beta1

    kind: Deployment spec: replicas: 1 selector: matchLabels: run: nginx strategy: type: RollingUpdate template: spec: containers: - env: - name: APP_HOST value: foo.com - name: WEB_SERVER_NAME value: bar.com image: docker/image:1.0 name: nginx imagePullSecrets: - name: registry restartPolicy: Always
  7. 2. plugável • escolha as missões que você quer utilizar

    e instale-as # Gemfile gem "james_bond-core" gem "james_bond-mission_build" gem "james_bond-mission_deploy" gem "james_bond-mission_release" gem "james_bond-mission_doctor"
  8. 2. rápido apenas a missão que vai ser utilizada será

    carregada no momento da execução
  9. exemplo • minor Release • Gera uma nova tag do

    git • Gera uma nova imagem docker # Gemfile $ bond release -g "minor"
  10. exemplo • deploy • realiza deploy do release 1.2.3 •

    sobe pro cluster kubernetes # Gemfile $ bond deploy -t 1.2.3
  11. Referências • Keynote: Writing Software by David Heinemeier Hansson •

    Hangout com m. fowler, kent beck e dhh • TDD, Straw Men, and Rhetoric • Microservices, Martin Fowler • Microservices (talk), Martin fowler • 12Factor • Scalable Microservices with Kubernetes • Large-scale cluster management at Google with Borg