2. QUIENES SOMOS?
Ezequiel Apfel Martin Paoletta
Red Bee Studios Jefe de grupo de Enterprise Architecture
@eapfel GlobalLogic Argentina
@martinpaoletta
Guitarra en 4 Elementos
domingo 6 de noviembre de 2011
3. TODOS TENEMOS UN MUERTO EN EL
PLACARD
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
4. CASO DE ESTUDIO
CMS PARA EMPRESA DE MEDIOS (USA)
• Arquitectura compleja • Desarrollado bajo TDD
• 3 aplicaciones interactuando: • Cobertura 90%
• Admin • Grails, RabbitMQ, Oracle, Jackrabbit,
Lucene, Tomcat
• Publisher
• Content Server
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
5. High Level
SAVVIS CMS-TOOL CMS-TOOL
Architecture INTERACTS WITH CMS-STAGE
THROUGH CMS-PUBLISHER
CMS-TOOL
Message between artefacts are
asinchronous
SAVVIS CMS-PUBLISHER
CONTENT Rabbit
LOCAL-REPO CMS-PUBLISHER
JackRabbit MQ
Environments
DEV * UAT * PRD *
SITE SITE SITE
Preview
Content Content Content
Server Server Server
SITE SITE SITE
Live
Content Content Content
Server Server Server
@eapfel
@martinpaoletta Preview is Mandatory for production environment
domingo 6 de noviembre de 2011
6. CASO DE ESTUDIO
PROBLEMAS
• Pasaje de ambiente integration a QA: • Interacciones entre componentes
10 hs promedio
• Deltas de BD
• Muchos archivos de con guración
en cada server
• Proceso de build complejo
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
7. DONDE FALLAMOS?
• Excesivos archivos de • Problemas de ambientes
con guración
• Builds tardes al cliente
• Subestimar la
complejidad del build • La última milla
• Sobreestimar la
complejidad del build
• ¿Donde están los test?
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
8. SI PUDIERAMOS SOLO APRETAR UN BOTÓN
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
9. CASO DE ÉXITO
• Con build y deployment bajo script:
20’
• 12’ solo ejecutando tests
• 3,33% del tiempo original
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
12. CONTINUOS DELIVERY - PRINCIPIOS
• El deployment debe ser repetible y • Terminado signi ca en producción
con able
• Calidad desde el día cero
• Automatizar todo!
• Todos son responsables del proceso
• Si algo resulta difícil o cuesta mucho, de release
hacerlo más seguido (mejorar el
proceso) • Mejorar continuamente
• Versionar todo
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
13. CONTINUOS DELIVERY - PRÁCTICAS
• 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
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
14. BUILD PIPELINE
Aumento de confianza en el producto
Ambientes más parecidos a producción
Tests de
aceptación de
usuarios
Etapa de commit
Compilación Tests de
Tests unitarios aceptación Producción
Análisis automáticos
Empaquetado
Tests de
capacidad
Feedback más temprano
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
15. BUILD Código fuente
Ambiente y
configuraciones Versionado Ambiente y
configuraciones
PIPELINE Testers
UAT
Configurar ambiente
Deploy de binarios Deploy de binarios
Smoke test
Desarrolladores
Revisar métricas de código y
fallos en la suite de tests
Tests de aceptación
Etapa de commit Tests de capacidad
Compilación
automáticos Configurar ambiente
Tests unitarios Configurar ambiente Deploy de binarios
Análisis Deploy de binarios Smoke test
Empaquetado Smoke test Pruebas de capacidad
Tests de aceptación
Operaciones Producción
Pulsan botón para release Configurar ambiente
Deploy de binarios
Smoke test
Almacena
binarios y Almacena
Binarios Binarios
metadata metadata
@eapfel
@martinpaoletta Repositorio de artefactos
domingo 6 de noviembre de 2011
20. Tests de aceptación UAT
Etapa de commit Producción
Compilación automáticos
Configurar ambiente Configurar ambiente
Tests unitarios
Deploy de binarios Deploy de binarios
Análisis
Smoke test Smoke test
Empaquetado Stress Tests
Tests de aceptación
Jenkins Master
CentOS 5 Infraestructura
On Premise
Ambientes de
pruebas UAT Producción
Configurar ambiente Configurar ambiente Configurar ambiente
Deploy de binarios Deploy de binarios Deploy de binarios
Smoke test Smoke test Smoke test
Tests de aceptación
Jenkins Slave
Windows 2008 Server
Desarrollo
Coding
Tests unitarios
Métricas locales
Commit en repositorio
Jenkins Slave
OS X
? iTunes AppStore
Dispositivos iOS
OTA deployment Configurar ambiente
Deploy de binarios
@eapfel Smoke test
@martinpaoletta
domingo 6 de noviembre de 2011
21. ENTORNOS
Ambientes más parecidos a producción
Tests de
aceptación de
usuarios
Etapa de commit
Compilación Tests de
Tests unitarios aceptación Producción
Análisis automáticos
Empaquetado
Tests de
capacidad
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
22. PAAS - PLATFORM AS A SERVICE
PAAS
IAAS
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
27. ENTORNOS
Play! Framework
PostgreSQL MongoDB Solr
PowerBook G4
@eapfel
@martinpaoletta Ambientes más parecidos a producción
domingo 6 de noviembre de 2011
28. ENTORNOS
Desarrollo: blue-tree-213
Play! Framework
PostgreSQL MongoDB Solr
PowerBook G4
Dyno
Heroku
MongoHQ Websolr
@eapfel Postgres
@martinpaoletta Ambientes más parecidos a producción
domingo 6 de noviembre de 2011
29. ENTORNOS
Desarrollo: blue-tree-213 UAT: messy-swamp-87
Play! Framework
PostgreSQL MongoDB Solr
Dyno Dyno
Heroku
PowerBook G4
MongoHQ Websolr
Postgres
Dyno
Heroku
MongoHQ Websolr
@eapfel Postgres
@martinpaoletta Ambientes más parecidos a producción
domingo 6 de noviembre de 2011
30. ENTORNOS
Desarrollo: blue-tree-213 UAT: messy-swamp-87 Prod: furious-smog-528
Play! Framework
PostgreSQL MongoDB Solr
Dyno Dyno Dyno Dyno Dyno Dyno Dyno Dyno
Heroku Heroku
PowerBook G4
MongoHQ Websolr MongoHQ Websolr
Postgres Postgres
Dyno
Heroku
MongoHQ Websolr
@eapfel Postgres
@martinpaoletta Ambientes más parecidos a producción
domingo 6 de noviembre de 2011
31. ENTORNOS BLUE-GREEN
Web Server Application Server Base de datos
Apache Azul Tomcat Azul MySQL Azul
Apache Verde Tomcat Verde MySQL Verde
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
34. DATABASE MIGRATIONS
• Versionar la base de datos y usar una • Asegurar que los tests creen los datos
herramienta para manejar los cambios necesarios, evitar con ictos (vía
particionamiento)
• Intentar mantener compatibilidad
hacia adelante y atrás con respecto al • Evitar integraciones vía bases de datos
esquema de DB entre aplicaciones
• Tratar de hacer siempre cambios
aditivos
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
35. ELIMINANDO EL GAP DE LA ULTIMA MILLA
• “Entregado” (desarrollador) está muy • Que falta?
lejos de “en producción, estable y
produciendo valor” • Pruebas de integración automáticas
• “En mi máquina funciona” • Pruebas de aceptación de usuario
• Montado y deployment en otros
ambientes
• Producción!!
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
36. EL GAP DE LA ULTIMA MILLA
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
37. EL GAP DE LA ULTIMA MILLA
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
38. RAD - RAPID APPLICATION DEVELOPMENT
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
39. • Hotswap de clases, templates, etc
• Stack completo
• Diagnóstico y solución rápida de
errores
• Modelo stateless
• Asíncrono
• Java, Groovy y Scala
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
42. BIBLIOGRAFÍA
• http://www.vance.com/steve/ • http://martinfowler.com/bliki/
perforce/Branching_Strategies.html BlueGreenDeployment.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
@eapfel
@martinpaoletta
domingo 6 de noviembre de 2011
43. !"#$"%&'#($)''
*+,-./0''
!"#$%&'(')'*$&+,-#*.!#)/,!&)0#(-")0
1'!"#$%&'(')'*$&+%&!2,3&%./%'++,!&)444
5#!'-&&2,!&)06789:;<=<><?9;@>7@A64
B&"$"-',!&)0!"#$%&'(')'*$&+)"+C!4
!"#"$%"&'()$#%'&'#**"+'&#,-#,'&."#."#&)/01#
domingo 6 de noviembre de 2011
44. @eapfel
ezequiel.apfel@globallogic.com
@martinpaoletta
martin.paoletta@globallogic.com
domingo 6 de noviembre de 2011