CI/CD en Invision

CI/CD en Invision

Charla explicando la ingeniería de CI/CD en mi trabajo (invisionapp.com) Fue en un drinkup de Eventbrite, Mendoza, Argentina

04280fd182525cdaee76572782ec34c0?s=128

Pablo Fredrikson

January 12, 2017
Tweet

Transcript

  1. 2.

    Pablo Fredrikson @pablokbs • Senior SRE @ Invision • 11

    años con Linux / Software libre • 2 años con Invision
  2. 3.

    Historia • 1 Jenkins configurado a mano por SRE •

    15 desarrolladores / 5 microservicios / 5 entornos / 10 cookbooks • Entornos empezaron a crecer • Servicios en diferentes lenguajes y versiones • Más gente empezaba a usar Jenkins • Más gente cometía errores • Jenkins se hacía lento • Jefes se quejaban
  3. 4.

    Historia • Job DSL plugin • Docker! • Capistrano •

    Chef job('MiTrabajo') { scm { github("git@github.com:pablokbs/myapp.git") } triggers { scm('*/15 * * * *') } steps { shell('deploy.sh') } }
  4. 5.

    Historia • Plugins con chef q = "roles:#{fetch(:application)} \ AND

    roles:#{fetch(:chef_role)} \ AND chef_environment:#{fetch(:environment)}" servers = query.search( :node, q, :filter_result => { :hostname => ["hostname"], :ip_address => ["ipaddress"], :roles => ["roles"] } ).first Capistrano
  5. 7.

    Lo bueno y malo • Deploys muy rápidos (en algunos

    casos tomaban 10 segundos) • 25 microservicios x 20 entornos x 2/3 branches (promedio) + PR Test + Cookbooks = 1700 trabajos • 1 Master con Esclavos en ASG con Docker (Promedio 3 nodos c3.8xlarge [60gb RAM - 32 CPU] durante el dia) • Gente podía cambiar de entorno fácilmente usando Job DSL • Job DSL no era muy feliz • Lo hacíamos todo nosotros (no escala)
  6. 8.

    Distribuir el trabajo • Nuevo management, nueva filosofía • Todos

    los equipos son startups (responsables de principio a final) • Los SRE no deberían ser los “Gatekeepers” sino que deberían ocupar su tiempo en brindar herramientas para los desarrolladores
  7. 9.

    Codeship • SaaS (cada equipo es una startup) • Docker!

    • Tests y deploys distribuidos y mantenidos por sus equipos en el mismo repo • Sintaxis muy simple y fácil de probar localmente - name: Tests type: serial service: terraform_test encrypted_dockercfg_path: dockercfg.encrypted steps: - name: "Running test" command: make test
  8. 10.

    Rosie • Chatbot en Slack para deploys sin interacción de

    SREs • rosie deploy uploader to production • Rollbacks sencillos y rápidos
  9. 11.

    El futuro: R.U.D.I. • Deploys de infraestructura completa con terraform

    (DNS, EC2, RDS, Certificados, Deploys) • Chaos monkey