Upload
martin-paoletta
View
482
Download
0
Embed Size (px)
Citation preview
ALCANZANDO EL NIRVANA:CONTINUOS DELIVERY, RAD, PAAS
domingo 6 de noviembre de 2011
Ezequiel ApfelRed Bee Studios
@eapfel
Martin PaolettaJefe de grupo de Enterprise Architecture
GlobalLogic Argentina@martinpaoletta
Guitarra en 4 Elementos
QUIENES SOMOS?
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
TODOS TENEMOS UN MUERTO EN EL PLACARD
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
CASO DE ESTUDIOCMS PARA EMPRESA DE MEDIOS (USA)
• Arquitectura compleja
• 3 aplicaciones interactuando:
• Admin
• Publisher
• Content Server
• Desarrollado bajo TDD
• Cobertura 90%
• Grails, RabbitMQ, Oracle, Jackrabbit, Lucene, Tomcat
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
UAT * PRD *DEV *
CMS-TOOL
CMS-PUBLISHERCONTENT
LOCAL-REPOJackRabbit
CMS-TOOLINTERACTS WITH CMS-STAGE THROUGH CMS-PUBLISHER
SAVVIS CMS-TOOL
SITE
ContentServer
SITE
ContentServer
SITE
ContentServer
SITE
ContentServer
SITE
ContentServer
SITE
ContentServer
Preview
Live
RabbitMQ
SAVVIS CMS-PUBLISHER
Message between artefacts are asinchronous
Preview is Mandatory for production environment
Environments
High Level Architecture
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
CASO DE ESTUDIOPROBLEMAS
• Pasaje de ambiente integration a QA: 10 hs promedio
• Deltas de BD
• Muchos archivos de con!guración en cada server
• Proceso de build complejo
• Interacciones entre componentes
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
DONDE FALLAMOS?• Excesivos archivos de
con!guración
• Subestimar la complejidad del build
• Sobreestimar la complejidad del build
• ¿Donde están los test?
• Problemas de ambientes
• Builds tardes al cliente
• La última milla
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
SI PUDIERAMOS SOLO APRETAR UN BOTÓN
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
CASO DE ÉXITO
• Con build y deployment bajo script: 20’
• 12’ solo ejecutando tests
• 3,33% del tiempo original
domingo 6 de noviembre de 2011
EXISTE UN MUNDO MEJOR!domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
• El deployment debe ser repetible y con!able
• Automatizar todo!
• Si algo resulta difícil o cuesta mucho, hacerlo más seguido (mejorar el proceso)
• Versionar todo
• Terminado signi!ca en producción
• Calidad desde el día cero
• Todos son responsables del proceso de release
• Mejorar continuamente
CONTINUOS DELIVERY - PRINCIPIOS
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
• Construir los binarios una única vez
• Usar el mismo mecanismo de deployment para todos los ambientes
• Correr un smoke test
• Si cualquier cosa falla, parar la linea de producción
CONTINUOS DELIVERY - PRÁCTICAS
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
BUILD PIPELINEAumento de confianza en el producto
Ambientes más parecidos a producción
Feedback más temprano
Tests de aceptación de
usuariosEtapa de commit
CompilaciónTests unitarios
AnálisisEmpaquetado
Tests de capacidad
ProducciónTests de
aceptación automáticos
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
BUILD PIPELINE
TestersDeploy de binarios
Operaciones Pulsan botón para release
DesarrolladoresRevisar métricas de código y
fallos en la suite de tests
Almacena binarios y metadata Binarios Almacena
metadata Binarios
VersionadoCódigo fuente Ambiente y configuraciones
Ambiente y configuraciones
Repositorio de artefactos
Etapa de commitCompilación
Tests unitariosAnálisis
Empaquetado
Tests de aceptación automáticos
Configurar ambienteDeploy de binarios
Smoke testTests de aceptación
UATConfigurar ambienteDeploy de binarios
Smoke test
Tests de capacidadConfigurar ambienteDeploy de binarios
Smoke testPruebas de capacidad
ProducciónConfigurar ambienteDeploy de binarios
Smoke test
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
Jenkins MasterCentOS 5
Tests de aceptación automáticos
Configurar ambienteDeploy de binarios
Smoke testTests de aceptación
UAT
Stress Tests
ProducciónConfigurar ambienteDeploy de binarios
Smoke test
DesarrolloCoding
Tests unitariosMétricas locales
Commit en repositorio
Ambientes de pruebas
Configurar ambienteDeploy de binarios
Smoke testTests de aceptación
UATConfigurar ambienteDeploy de binarios
Smoke test
ProducciónConfigurar ambienteDeploy de binarios
Smoke test
iTunes AppStore
Jenkins SlaveOS X
Jenkins SlaveWindows 2008 Server
OTA deploymentDispositivos iOSConfigurar ambienteDeploy de binarios
Smoke test
Etapa de commitCompilación
Tests unitariosAnálisis
Empaquetado
?
InfraestructuraOn Premise
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
ENTORNOS
Ambientes más parecidos a producción
Tests de aceptación de
usuariosEtapa de commit
CompilaciónTests unitarios
AnálisisEmpaquetado
Tests de capacidad
ProducciónTests de
aceptación automáticos
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
PAAS - PLATFORM AS A SERVICE
IAAS
PAAS
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
ENTORNOS
Ambientes más parecidos a produccióndomingo 6 de noviembre de 2011
@eapfel@martinpaoletta
ENTORNOS
Ambientes más parecidos a produccióndomingo 6 de noviembre de 2011
@eapfel@martinpaoletta
ENTORNOS
PowerBook G4
PostgreSQL MongoDB Solr
Play! Framework
Ambientes más parecidos a produccióndomingo 6 de noviembre de 2011
@eapfel@martinpaoletta
ENTORNOS
PowerBook G4
PostgreSQL MongoDB Solr
Play! Framework
Desarrollo: blue-tree-213
Heroku Postgres MongoHQ Websolr
Dyno
Ambientes más parecidos a produccióndomingo 6 de noviembre de 2011
@eapfel@martinpaoletta
ENTORNOS
PowerBook G4
PostgreSQL MongoDB Solr
Play! Framework
Desarrollo: blue-tree-213
Heroku Postgres MongoHQ Websolr
Dyno
UAT: messy-swamp-87
Heroku Postgres MongoHQ Websolr
Dyno Dyno
Ambientes más parecidos a produccióndomingo 6 de noviembre de 2011
@eapfel@martinpaoletta
ENTORNOS
PowerBook G4
PostgreSQL MongoDB Solr
Play! Framework
Desarrollo: blue-tree-213
Heroku Postgres MongoHQ Websolr
Dyno
UAT: messy-swamp-87
Heroku Postgres MongoHQ Websolr
Dyno Dyno
Prod: furious-smog-528
Heroku Postgres MongoHQ Websolr
Dyno Dyno Dyno DynoDyno Dyno
Ambientes más parecidos a produccióndomingo 6 de noviembre de 2011
@eapfel@martinpaoletta
ENTORNOS BLUE-GREEN
Web Server Application Server Base de datos
Apache Azul
Apache Verde
Tomcat Azul
Tomcat Verde
MySQL Azul
MySQL Verde
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
DATABASE MIGRATIONS
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
DATABASE MIGRATIONS
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
• Versionar la base de datos y usar una herramienta para manejar los cambios
• Intentar mantener compatibilidad hacia adelante y atrás con respecto al esquema de DB
• Tratar de hacer siempre cambios aditivos
• Asegurar que los tests creen los datos necesarios, evitar con"ictos (vía particionamiento)
• Evitar integraciones vía bases de datos entre aplicaciones
DATABASE MIGRATIONS
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
• “Entregado” (desarrollador) está muy lejos de “en producción, estable y produciendo valor”
• “En mi máquina funciona”
• Que falta?
• Pruebas de integración automáticas
• Pruebas de aceptación de usuario
• Montado y deployment en otros ambientes
• Producción!!
ELIMINANDO EL GAP DE LA ULTIMA MILLA
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
EL GAP DE LA ULTIMA MILLA
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
EL GAP DE LA ULTIMA MILLA
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
RAD - RAPID APPLICATION DEVELOPMENT
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
• Hotswap de clases, templates, etc
• Stack completo
• Diagnóstico y solución rápida de errores
• Modelo stateless
• Asíncrono
• Java, Groovy y Scala
domingo 6 de noviembre de 2011
DEMO
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
DEMO
domingo 6 de noviembre de 2011
@eapfel@martinpaoletta
• http://www.vance.com/steve/perforce/Branching_Strategies.html
• http://blog.heroku.com/archives/2009/2/23/why_instant_deployment_matters/
• http://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912
• http://martinfowler.com/bliki/BlueGreenDeployment.html
BIBLIOGRAFÍA
domingo 6 de noviembre de 2011
!"#$"%&'#($)''*+,-./0''
!"#$%&'(')'*$&+,-#*.!#)/,!&)0#(-")01'!"#$%&'(')'*$&+%&!2,3&%./%'++,!&)4445#!'-&&2,!&)06789:;<=<><?9;@>7@A64B&"$"-',!&)0!"#$%&'(')'*$&+)"+C!4
!"#"$%"&'()$#%'&'#**"+'&#,-#,'&."#."#&)/01#domingo 6 de noviembre de 2011