Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Tuenti release process

1,842 views

Published on

Published in: Technology
  • Be the first to comment

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!

×