L'intégration continue chez Pages Jaunes - Build Bot Mobile

Post on 16-Apr-2017

4.765 views 2 download

Transcript of L'intégration continue chez Pages Jaunes - Build Bot Mobile

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