Slide 1

Slide 1 text

CI/CD en Invision Por Pablo Fredrikson

Slide 2

Slide 2 text

Pablo Fredrikson @pablokbs ● Senior SRE @ Invision ● 11 años con Linux / Software libre ● 2 años con Invision

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Historia ● Job DSL plugin ● Docker! ● Capistrano ● Chef job('MiTrabajo') { scm { github("[email protected]:pablokbs/myapp.git") } triggers { scm('*/15 * * * *') } steps { shell('deploy.sh') } }

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Historia ● Plugins con chef Capistrano

Slide 7

Slide 7 text

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)

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Rosie ● Chatbot en Slack para deploys sin interacción de SREs ● rosie deploy uploader to production ● Rollbacks sencillos y rápidos

Slide 11

Slide 11 text

El futuro: R.U.D.I. ● Deploys de infraestructura completa con terraform (DNS, EC2, RDS, Certificados, Deploys) ● Chaos monkey

Slide 12

Slide 12 text

Gracias ¿Preguntas? @pablokbs