Release Process Diego Muñoz Senior Frontend Engineer [email_address]
Agenda
Agenda
Equipos Tech. de Tuenti <ul><ul><li>Frontend:  </li></ul></ul><ul><ul><ul><li>Ca$hMoney, Community, Core, Gaming/Apps, Int...
¿Cómo de grande es Tuenti? <ul><ul><li>+10.000.000 usuarios </li></ul></ul><ul><ul><li>+76 minutos de media de uso diario ...
Pero...¿Y el código? <ul><ul><li>+14.000 archivos </li></ul></ul><ul><ul><li>+2.000 folders   </li></ul></ul><ul><ul><li>W...
Checkout
Checkout <ul><ul><li>Herramienta SCM: Mercurial </li></ul></ul><ul><ul><li>Como siempre lo pregunta la gente...  ¿Por qué ...
Checkout <ul><ul><li>Un repositorio por equipo </li></ul></ul><ul><ul><li>Core, Backend, ClientApps... </li></ul></ul><ul>...
Coding
Coding <ul><ul><li>Una vez hecho el checkout... </li></ul></ul><ul><ul><li>crear o actualizar al branch deseado... </li></...
Testing
Testing <ul><ul><li>Unit tests, Integration tests </li></ul></ul><ul><ul><ul><li>PHPUnit </li></ul></ul></ul><ul><ul><ul><...
Testing <ul><ul><li>Hudson para Continuous Integration </li></ul></ul><ul><ul><ul><li>Diferentes prioridades de build por ...
Merge
Merge <ul><ul><li>Calendario: 2 releases a la semana (martes y jueves) </li></ul></ul><ul><ul><li>8+ branches por release ...
Merge <ul><ul><li>Push-Pull Party </li></ul></ul><ul><ul><ul><li>Procedimiento normal de Mercurial: </li></ul></ul></ul><u...
Merge <ul><ul><li>Release meeting el dia anterior a la release </li></ul></ul><ul><ul><li>Ingenieros:  </li></ul></ul><ul>...
Release
Release <ul><ul><li>Subida usualmente a primera hora de la mañana </li></ul></ul><ul><ul><li>Asistentes:  </li></ul></ul><...
Release <ul><ul><li>Build process </li></ul></ul><ul><ul><ul><li>Tuenti es PHP pero no se sube tal cual </li></ul></ul></ul>
Release <ul><ul><li>Build process </li></ul></ul><ul><ul><ul><li>Aplicar traducciones </li></ul></ul></ul><ul><ul><ul><li>...
Stabilize
Stabilize <ul><ul><li>&quot;Live bugfixing&quot; hasta ~11:30 AM </li></ul></ul><ul><ul><li>Canal de chat con todos los im...
Stabilize <ul><ul><li>Cierre de la release </li></ul></ul><ul><ul><li>Release Manager:  </li></ul></ul><ul><ul><ul><li>Mer...
The End       Gracias por vuestro tiempo!
Upcoming SlideShare
Loading in …5
×

Tuenti release process

1,788 views
1,701 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,788
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
19
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Tuenti release process

  1. 1. Release Process Diego Muñoz Senior Frontend Engineer [email_address]
  2. 2. Agenda
  3. 3. Agenda
  4. 4. Equipos Tech. de Tuenti <ul><ul><li>Frontend:  </li></ul></ul><ul><ul><ul><li>Ca$hMoney, Community, Core, Gaming/Apps, Interactive, Local, Video </li></ul></ul></ul><ul><ul><ul><li>Mobile Core, Client Apps  </li></ul></ul></ul><ul><ul><ul><li>Tu (MVNO) </li></ul></ul></ul><ul><ul><li>Framework/Architecture </li></ul></ul><ul><ul><li>Backend, Scalability, Stats </li></ul></ul><ul><ul><li>Testing Framework </li></ul></ul><ul><ul><li>Dev-Tools </li></ul></ul><ul><ul><li>IT </li></ul></ul><ul><ul><li>Systems </li></ul></ul><ul><ul><li>QA </li></ul></ul><ul><ul><li>Design & UX </li></ul></ul>
  5. 5. ¿Cómo de grande es Tuenti? <ul><ul><li>+10.000.000 usuarios </li></ul></ul><ul><ul><li>+76 minutos de media de uso diario </li></ul></ul><ul><ul><li>+175.000.000 mensajes de chat / dia </li></ul></ul><ul><ul><li>+4.000.000 fotos subidas al dia en picos </li></ul></ul><ul><ul><li>+30.000.000.000 page views / mes </li></ul></ul><ul><ul><li>+35.000 peticiones web / seg. en picos </li></ul></ul><ul><ul><li>+1.000 servidores </li></ul></ul><ul><ul><li>+180 empleados (de 18 nacionalidades) </li></ul></ul><ul><ul><li>+60% de los empleados de la parte de tech. </li></ul></ul>
  6. 6. Pero...¿Y el código? <ul><ul><li>+14.000 archivos </li></ul></ul><ul><ul><li>+2.000 folders </li></ul></ul><ul><ul><li>Web </li></ul></ul><ul><ul><li>Web móvil </li></ul></ul><ul><ul><li>Aplicaciones móviles nativas </li></ul></ul><ul><ul><li>APIs </li></ul></ul><ul><ul><li>Jobs </li></ul></ul><ul><ul><li>Tools </li></ul></ul><ul><ul><li>Flash components </li></ul></ul><ul><ul><li>Tests </li></ul></ul><ul><ul><li>... </li></ul></ul>
  7. 7. Checkout
  8. 8. Checkout <ul><ul><li>Herramienta SCM: Mercurial </li></ul></ul><ul><ul><li>Como siempre lo pregunta la gente... ¿Por qué Mercurial y no Git? </li></ul></ul><ul><ul><ul><li>Interfaz y API muy limpios en Python </li></ul></ul></ul><ul><ul><ul><li>100% Cross-platform (Linux/Mac/Windows) </li></ul></ul></ul><ul><ul><ul><li>Más user-friendly y parecido al viejo SVN </li></ul></ul></ul>
  9. 9. Checkout <ul><ul><li>Un repositorio por equipo </li></ul></ul><ul><ul><li>Core, Backend, ClientApps... </li></ul></ul><ul><ul><ul><li>Branch por proyecto + default </li></ul></ul></ul><ul><ul><li>stable </li></ul></ul><ul><ul><ul><li>default  </li></ul></ul></ul><ul><ul><li>hotfix </li></ul></ul><ul><ul><ul><li>default </li></ul></ul></ul><ul><ul><li>integration </li></ul></ul><ul><ul><ul><li>default </li></ul></ul></ul><ul><ul><li>release </li></ul></ul><ul><ul><ul><li>default </li></ul></ul></ul>
  10. 10. Coding
  11. 11. Coding <ul><ul><li>Una vez hecho el checkout... </li></ul></ul><ul><ul><li>crear o actualizar al branch deseado... </li></ul></ul><ul><ul><li>y a programar! (la parte divertida) </li></ul></ul>
  12. 12. Testing
  13. 13. Testing <ul><ul><li>Unit tests, Integration tests </li></ul></ul><ul><ul><ul><li>PHPUnit </li></ul></ul></ul><ul><ul><ul><ul><li>Grandes modificaciones y extensiones </li></ul></ul></ul></ul><ul><ul><ul><li>Mock objects </li></ul></ul></ul><ul><ul><ul><ul><li>Extendido de PHPUnit </li></ul></ul></ul></ul><ul><ul><li>Acceptance tests </li></ul></ul><ul><ul><ul><li>Selenium + PHPUnit </li></ul></ul></ul><ul><ul><ul><li>Normalmente desde VMs </li></ul></ul></ul>
  14. 14. Testing <ul><ul><li>Hudson para Continuous Integration </li></ul></ul><ul><ul><ul><li>Diferentes prioridades de build por branch </li></ul></ul></ul><ul><ul><ul><li>+30 branches de media </li></ul></ul></ul>
  15. 15. Merge
  16. 16. Merge <ul><ul><li>Calendario: 2 releases a la semana (martes y jueves) </li></ul></ul><ul><ul><li>8+ branches por release de media </li></ul></ul><ul><ul><ul><li>  A veces modificamos +2000 archivos! </li></ul></ul></ul><ul><ul><li>Merges permitidos desde 2 dias laborables antes </li></ul></ul><ul><ul><li>Merges hasta 1 PM del dia anterior </li></ul></ul><ul><ul><ul><li>CTO approval para saltarse la norma </li></ul></ul></ul>
  17. 17. Merge <ul><ul><li>Push-Pull Party </li></ul></ul><ul><ul><ul><li>Procedimiento normal de Mercurial: </li></ul></ul></ul><ul><ul><ul><ul><li>Pull - Update - Merge - Commit - Push </li></ul></ul></ul></ul><ul><ul><ul><li>Mergeando branches: </li></ul></ul></ul><ul><ul><ul><ul><li>Pull - Update - Merge - Commit - Push abortado - Pull de nuevo - Update - ... etc. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Has de ser rápido mergeando :) </li></ul></ul></ul></ul><ul><ul><li>Merge conflicts </li></ul></ul><ul><ul><ul><li>Mercurial != magia (pero mejor que SVN) </li></ul></ul></ul><ul><ul><ul><li>A veces deja buenos estropicios mal mergeados &quot;para revisión humana&quot; </li></ul></ul></ul>
  18. 18. Merge <ul><ul><li>Release meeting el dia anterior a la release </li></ul></ul><ul><ul><li>Ingenieros:  </li></ul></ul><ul><ul><ul><li>Pull de repositorio de equipo </li></ul></ul></ul><ul><ul><ul><li>Mergeando en repositorio de integration </li></ul></ul></ul><ul><ul><li>Release Manager: </li></ul></ul><ul><ul><ul><li>Pull de repositorio de integration </li></ul></ul></ul><ul><ul><ul><li>Mergeando en repositorio de release </li></ul></ul></ul><ul><ul><li>Errors spreadsheet </li></ul></ul><ul><ul><ul><li>QA + ingenieros añaden bugs </li></ul></ul></ul><ul><ul><ul><li>Ingenieros responsables del código arreglan en el repositorio de release </li></ul></ul></ul>
  19. 19. Release
  20. 20. Release <ul><ul><li>Subida usualmente a primera hora de la mañana </li></ul></ul><ul><ul><li>Asistentes: </li></ul></ul><ul><ul><ul><li>Todos los ingenieros que han subido código </li></ul></ul></ul><ul><ul><ul><ul><li>mínimo 1 por equipo </li></ul></ul></ul></ul><ul><ul><ul><li>Responsable(s) de QA </li></ul></ul></ul><ul><ul><ul><li>Release Manager </li></ul></ul></ul><ul><ul><ul><ul><li>usualmente parte del equipo de Dev-Tools </li></ul></ul></ul></ul><ul><ul><ul><li>1+ ingenieros de Testing FW </li></ul></ul></ul><ul><ul><ul><li>Otros implicados si es necesario </li></ul></ul></ul><ul><ul><ul><li>Responsable de sistemas </li></ul></ul></ul>
  21. 21. Release <ul><ul><li>Build process </li></ul></ul><ul><ul><ul><li>Tuenti es PHP pero no se sube tal cual </li></ul></ul></ul>
  22. 22. Release <ul><ul><li>Build process </li></ul></ul><ul><ul><ul><li>Aplicar traducciones </li></ul></ul></ul><ul><ul><ul><li>Minimizar código </li></ul></ul></ul><ul><ul><ul><li>Agrupar archivos </li></ul></ul></ul><ul><ul><ul><li>Y otros tweaks... </li></ul></ul></ul><ul><ul><li>Full build: 10 minutos aprox. </li></ul></ul><ul><ul><ul><li>Delta builds (cambios solamente) </li></ul></ul></ul><ul><ul><li>Envio de archivos a todos los servidores: Segundos </li></ul></ul>
  23. 23. Stabilize
  24. 24. Stabilize <ul><ul><li>&quot;Live bugfixing&quot; hasta ~11:30 AM </li></ul></ul><ul><ul><li>Canal de chat con todos los implicados </li></ul></ul><ul><ul><li>Errors spreadsheet (el mismo creado el dia anterior) </li></ul></ul><ul><ul><ul><li>Bugs conocidos que ya estén en el bugs backlog: ignorar o priorizar </li></ul></ul></ul><ul><ul><ul><li>Nuevos bugs de prioridad baja: bugs backlog </li></ul></ul></ul><ul><ul><li>Es importante aprender a priorizar </li></ul></ul><ul><ul><ul><li>No siempre da tiempo a arreglar durante la release </li></ul></ul></ul>
  25. 25. Stabilize <ul><ul><li>Cierre de la release </li></ul></ul><ul><ul><li>Release Manager:  </li></ul></ul><ul><ul><ul><li>Merge a repositorios stable y hotfix </li></ul></ul></ul><ul><ul><li>Ingenieros (1 por equipo): </li></ul></ul><ul><ul><ul><li>Pull del repositorio de stable </li></ul></ul></ul><ul><ul><ul><ul><li>Merge en default de repositorio del equipo </li></ul></ul></ul></ul><ul><ul><ul><li>Merge del default de repositorio de equipo </li></ul></ul></ul><ul><ul><ul><ul><li>En cada rama en que se esté trabajando </li></ul></ul></ul></ul>
  26. 26. The End       Gracias por vuestro tiempo!

×