l'intégration continue chez pages jaunes - build bot mobile
Post on 16-Apr-2017
4.765 Views
Preview:
TRANSCRIPT
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 1
Intégra(on Con(nue@ PagesJaunes
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 2
Quel contexte, quels besoins ?
Quelle intégra-on con-nue ?
Quels tests ?
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 3
Contexte PagesJaunes Mobile
• 6 équipes (4 Feature Teams + équipe Tech + Back office mobile)
• 50 personnes
• Plusieurs millions d'euros invesBs par an
• Audience mobile cumulée : + de 30 millions de visites / mois
• SLA : 99,9 %
• Un enjeu business important
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 4
Quels besoins ?Garan%r la qualité de l'applica%on en u%lisant un ou)l adapté
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 5
Garan%r la qualité de l'appli iOS
• + 60 000 lignes de code
• Obliga(on de taux de crash < 0,5%
• 10 developpeurs iOS
• Complexité fonc'onnelle
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 6
Choisir un ou*l adapté
• Simple à prendre en main et à u.liser
• Performant
• Modulaire
• Réduire la maintenance au minimum
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 7
Quelle Intégra-on Con-nue ?Quel historique ? À quoi on a abou2 concrètement ?
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 8
Historique
• Jenkins / GitLab
• Hébergé et géré en interne (temps de maintenance important)
• Divers problèmes : OSX ou Xcode pas à jour, problèmes réseaux,
simulateur qui plante, etc...
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 9
Historique
• Jenkins / GitLab
• Hébergé et géré en interne (temps de maintenance important)
• Divers problèmes : OSX ou Xcode pas à jour, problèmes réseaux,
simulateur qui plante, etc...
Il nous fallait quelque chose de plus efficace
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 10
Ce que l'on a mis en place
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 11
Le Build Bot Mobile
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 12
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 13
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 14
Infra - Hébergement
• Ges%on du parc machine (installa%on / entre%en)
• Réseaux (fiable et sans restric%on)
• Sécurité (garan%r un environnement sécurisé)
• Logiciels (installa%on / mise à jour)
• Environnement sain (toujours dans un état "propre")
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 15
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 16
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 17
Composants - Fonc-ons
• Git: git-clone
• Xcode: xcode-test, xcode-analyze, xcode-archive
• Déploiement: deploy-to-itunesconnect, deploy-to-beta, deploy-to-bitrise
• Rapports: slack-message
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 18
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 19
Workflows
Les plus importants :
• Workflows de Tests
• Workflows de Déploiement
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 20
Workflows - Tests
Ce Workflow se déclenche :
• à chaque pull request
• à la créa-on d'une branche nommée feature/*
• au push du code sur ce4e branche
Les tests sont bloquants : s'ils ne passent pas, la pull request ne passe pas !
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 21
Workflows - Deploy
• Develop
• Déclenché au push sur la branche develop
• Généra1on de changelog
• Déploiement sur fabric beta et mini page web
• Master : Idem mais deployé sur l'App Store
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 22
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 23
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 24
Notre solu*on aujourd'hui
• Une solu*on SaaS (Bitrise)
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 25
Notre solu*on aujourd'hui
• Une solu*on SaaS (Bitrise)
• Maintenance : pas de materiel, peu de logiciel
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 26
Notre solu*on aujourd'hui
• Une solu*on SaaS (Bitrise)
• Maintenance : pas de materiel, peu de logiciel
• Des ou*ls simples et rapides à administrer
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 27
Notre solu*on aujourd'hui
• Une solu*on SaaS (Bitrise)
• Maintenance : pas de materiel, peu de logiciel
• Des ou*ls simples et rapides à administrer
• Modulaire
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 28
Notre solu*on aujourd'hui
• Une solu*on SaaS (Bitrise)
• Maintenance : pas de materiel, peu de logiciel
• Des ou*ls simples et rapides à administrer
• Modulaire
• Intégra*ons avec Github, Slack, Fabric, AppStore, ...
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 29
Notre solu*on aujourd'hui
• Une solu*on SaaS (Bitrise)
• Maintenance : pas de materiel, peu de logiciel
• Des ou*ls simples et rapides à administrer
• Modulaire
• Intégra*ons avec Github, Slack, Fabric, AppStore, ...
• Open Source
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 30
BitriseIntégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 31
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 32
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 33
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 34
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 35
Plus de 60 intégra1onsvers des plateformes .erces
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 36
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 37
Quels tests ?
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 38
Quels tests ?• Tests Unitaires (XCTest)
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 39
Quels tests ?• Tests Unitaires (XCTest)
• Tests Fonc3onnels (Xcode 7 / Calabash / KIF)
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 40
Quels tests ?• Tests Unitaires (XCTest)
• Tests Fonc3onnels (Xcode 7 / Calabash / KIF)
• Tests de performances (Dynatrace)
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 41
Quels tests ?• Tests Unitaires (XCTest)
• Tests Fonc3onnels (Xcode 7 / Calabash / KIF)
• Tests de performances (Dynatrace)
• Tests des ouvertures externes de l'applica3on (Apple Plan, Universal links, Spotligth...)
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 42
Quels tests ?• Tests Unitaires (XCTest)
• Tests Fonc3onnels (Xcode 7 / Calabash / KIF)
• Tests de performances (Dynatrace)
• Tests des ouvertures externes de l'applica3on (Apple Plan, Universal links, Spotligth...)
• Analyse sta3que (Faux Pas) - Work in progress...
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 43
TL;DRBuild Bot Mobile
• Exécu'on des tests et deploiement automa'sés à chaque
modifica'on pushée sur le repo Git
• Sérénité lors de refactorisa'on ou de nouveaux développements
• Une version à jour & stable est toujours disponible pour tous
(QA, PO, MKT, etc...)
• Next Steps : Android, nouveaux modules (analyse de flux, stats)
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 44
Ques%ons ?
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 45
Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 46
top related