Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Code, Ship and Run (french)

Code, Ship and Run (french)

How we make it works (As seen at PetalMD)

Julien Maitrehenry

December 14, 2016
Tweet

More Decks by Julien Maitrehenry

Other Decks in Technology

Transcript

  1. CODE, SHIP AND RUN
    How we make it works (As seen at work)

    View full-size slide

  2. QUI SUIS-JE ?
    Julien Maitrehenry
    DevOps at PetalMD
    jmaitrehenry.ca

    https://github.com/jmaitrehenry

    @jmaitrehenry

    View full-size slide

  3. AGENDA
    ➤ Contexte

    View full-size slide

  4. AGENDA
    ➤ Contexte
    ➤ Notre flow

    View full-size slide

  5. AGENDA
    ➤ Contexte
    ➤ Notre flow
    ➤ Nos outils et pourquoi

    View full-size slide

  6. AGENDA
    ➤ Contexte
    ➤ Notre flow
    ➤ Nos outils et pourquoi
    ➤ Prochaines étapes

    View full-size slide

  7. CONTEXTE
    On fait quoi chez Petal ?

    Du point de vue de la R&D

    View full-size slide

  8. CONTEXTE - NOS APPS

    View full-size slide

  9. CONTEXTE - NOS APPS
    ➤ 1 application Rails avec 15k tests (incluant unit et e2e)

    View full-size slide

  10. CONTEXTE - NOS APPS
    ➤ 1 application Rails avec 15k tests (incluant unit et e2e)
    ➤ 1 application front-end avec 1985 unit tests et 426 e2e tests

    View full-size slide

  11. CONTEXTE - NOS APPS
    ➤ 1 application Rails avec 15k tests (incluant unit et e2e)
    ➤ 1 application front-end avec 1985 unit tests et 426 e2e tests
    ➤ 1 application front-end avec 193 unit tests et 108 e2e tests

    View full-size slide

  12. CONTEXTE - NOS APPS
    ➤ 1 application Rails avec 15k tests (incluant unit et e2e)
    ➤ 1 application front-end avec 1985 unit tests et 426 e2e tests
    ➤ 1 application front-end avec 193 unit tests et 108 e2e tests
    ➤ 1 application iOS / Swift avec 908 unit tests et 48 UI

    View full-size slide

  13. CONTEXTE - NOS APPS
    ➤ 1 application Rails avec 15k tests (incluant unit et e2e)
    ➤ 1 application front-end avec 1985 unit tests et 426 e2e tests
    ➤ 1 application front-end avec 193 unit tests et 108 e2e tests
    ➤ 1 application iOS / Swift avec 908 unit tests et 48 UI
    ➤ 1 application Android / React-Native avec 462 unit tests

    View full-size slide

  14. CONTEXTE - NOTRE OBJECTIF

    View full-size slide

  15. CONTEXTE - NOTRE OBJECTIF
    ➤ Réduire le temps entre le début du développement et la mise
    en production

    View full-size slide

  16. CONTEXTE - NOTRE OBJECTIF
    ➤ Réduire le temps entre le début du développement et la mise
    en production
    ➤ Ne pas avoir de dépendance sur une équipe / personne qui
    met en production

    View full-size slide

  17. CONTEXTE - NOTRE OBJECTIF
    ➤ Réduire le temps entre le début du développement et la mise
    en production
    ➤ Ne pas avoir de dépendance sur une équipe / personne qui
    met en production
    ➤ Les tests ne doivent pas être un frein

    View full-size slide

  18. CONTEXTE - NOTRE OBJECTIF
    ➤ Réduire le temps entre le début du développement et la mise
    en production
    ➤ Ne pas avoir de dépendance sur une équipe / personne qui
    met en production
    ➤ Les tests ne doivent pas être un frein
    ➤ Un coverage minimum par patch est obligatoire

    View full-size slide

  19. NOTRE FLOW
    Du dev à la prod

    View full-size slide

  20. NOTRE FLOW - PUSH TO MERGE

    View full-size slide

  21. NOTRE FLOW - PUSH TO MERGE

    View full-size slide

  22. NOTRE FLOW - PUSH TO MERGE

    View full-size slide

  23. NOTRE FLOW - PUSH TO MERGE

    View full-size slide

  24. NOTRE FLOW - PUSH TO MERGE

    View full-size slide

  25. NOTRE FLOW - PUSH TO MERGE

    View full-size slide

  26. NOTRE FLOW - PUSH TO MERGE

    View full-size slide

  27. NOTRE FLOW - PUSH TO MERGE

    View full-size slide

  28. NOTRE FLOW - PUSH TO MERGE

    View full-size slide

  29. NOTRE FLOW - PUSH TO MERGE

    View full-size slide

  30. NOTRE FLOW - MERGE TO PROD

    View full-size slide

  31. ➤ changement dans master => build
    NOTRE FLOW - MERGE TO PROD

    View full-size slide

  32. ➤ changement dans master => build
    ➤ Build de master vert => deploy
    NOTRE FLOW - MERGE TO PROD

    View full-size slide

  33. ➤ changement dans master => build
    ➤ Build de master vert => deploy
    NOTRE FLOW - MERGE TO PROD

    View full-size slide

  34. ➤ changement dans master => build
    ➤ Build de master vert => deploy
    NOTRE FLOW - MERGE TO PROD

    View full-size slide

  35. ➤ changement dans master => build
    ➤ Build de master vert => deploy
    ➤ Open deployment hours: 10am to 4pm - lundi à vendredi
    NOTRE FLOW - MERGE TO PROD

    View full-size slide

  36. NOTRE FLOW - MERGE TO PROD - RAILS

    View full-size slide

  37. NOTRE FLOW - MERGE TO PROD - RAILS

    View full-size slide

  38. NOTRE FLOW - MERGE TO PROD - RAILS

    View full-size slide

  39. NOTRE FLOW - MERGE TO PROD - RAILS

    View full-size slide

  40. NOTRE FLOW - MERGE TO PROD - JS / STATIC APP

    View full-size slide

  41. NOTRE FLOW - MERGE TO PROD - JS / STATIC APP
    ➤ Build de master créé un dist (webpack)

    View full-size slide

  42. NOTRE FLOW - MERGE TO PROD - JS / STATIC APP
    ➤ Build de master créé un dist (webpack)
    ➤ Ansible upload le dist

    View full-size slide

  43. NOTRE FLOW - MERGE TO PROD - IOS

    View full-size slide

  44. NOTRE FLOW - MERGE TO PROD - IOS

    View full-size slide

  45. NOTRE FLOW - MERGE TO PROD - IOS

    View full-size slide

  46. NOTRE FLOW - MERGE TO PROD - IOS

    View full-size slide

  47. NOTRE FLOW - MERGE TO PROD - IOS

    View full-size slide

  48. NOTRE FLOW - MERGE TO PROD - IOS

    View full-size slide

  49. NOTRE FLOW - MERGE TO PROD - IOS

    View full-size slide

  50. NOTRE FLOW - MERGE TO PROD

    View full-size slide

  51. NOS OUTILS
    Et pourquoi on les
    a choisi

    View full-size slide

  52. ➤ Github
    NOS OUTILS

    View full-size slide

  53. ➤ Github
    ➤ Jenkins
    NOS OUTILS

    View full-size slide

  54. ➤ Github
    ➤ Jenkins
    ➤ Codecov
    NOS OUTILS

    View full-size slide

  55. ➤ Github
    ➤ Jenkins
    ➤ Codecov
    ➤ PullApprove
    NOS OUTILS

    View full-size slide

  56. NOS OUTILS - GITHUB
    ➤ Beaucoup d’intégrations
    ➤ Version cloud qui fonctionne
    ➤ Status check sur les Pull Requests
    ➤ Leur mascotte est vraiment top

    View full-size slide

  57. NOS OUTILS - GITHUB

    View full-size slide

  58. NOS OUTILS - JENKINS
    ➤ Scale vraiment facilement et bien
    ➤ Beaucoup moins cher qu’un outil cloud (CircleCI, Travis, etc)
    ➤ Intégration Github, permet de relancer les builds avec un
    commentaire

    View full-size slide

  59. NOS OUTILS - JENKINS

    View full-size slide

  60. NOS OUTILS - JENKINS

    View full-size slide

  61. NOS OUTILS - JENKINS

    View full-size slide

  62. NOS OUTILS - JENKINS

    View full-size slide

  63. NOS OUTILS - JENKINS

    View full-size slide

  64. NOS OUTILS - JENKINS

    View full-size slide

  65. NOS OUTILS - JENKINS

    View full-size slide

  66. NOS OUTILS - JENKINS

    View full-size slide

  67. NOS OUTILS - JENKINS

    View full-size slide

  68. NOS OUTILS - JENKINS

    View full-size slide

  69. NOS OUTILS - CODECOV
    ➤ Très bonne intégration avec Github
    ➤ Status
    ➤ Commentaire
    ➤ Plugin Chrome pour voir le coverage dans Github
    ➤ Facile à configurer

    View full-size slide

  70. NOS OUTILS - CODECOV

    View full-size slide

  71. NOS OUTILS - CODECOV

    View full-size slide

  72. NOS OUTILS - PULLAPPROVE
    ➤ Intégration Github
    ➤ Mettre des règles sur des labels
    ➤ Mettre des règles sur des fichiers
    ➤ Approbation via commentaire Github

    View full-size slide

  73. BONUS
    Environnement de staging

    View full-size slide

  74. ASK
    ALL THE QUESTIONS

    View full-size slide