SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
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
Bitrise
Inté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égra1ons
vers 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;DR
Build 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

Contenu connexe

Tendances

Tap publisher par Frédéric Aloé
Tap publisher par Frédéric AloéTap publisher par Frédéric Aloé
Tap publisher par Frédéric AloéCocoaHeads France
 
How javascript core helped PAW to move from a small app to an extensible tool
How javascript core helped PAW to move from a small app to an extensible toolHow javascript core helped PAW to move from a small app to an extensible tool
How javascript core helped PAW to move from a small app to an extensible toolCocoaHeads France
 
CocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeadsRNS
 
La sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockLa sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockNicolas Lourenço
 
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015Loïc Knuchel
 
iOSアプリケーションアーキテクチャ選定の鍵を探す
iOSアプリケーションアーキテクチャ選定の鍵を探すiOSアプリケーションアーキテクチャ選定の鍵を探す
iOSアプリケーションアーキテクチャ選定の鍵を探すKenji Tanaka
 
JHipster à Devoxx 2015
JHipster à Devoxx 2015JHipster à Devoxx 2015
JHipster à Devoxx 2015Julien Dubois
 
Breizhcamp 2015 Ionic Framework
Breizhcamp 2015 Ionic FrameworkBreizhcamp 2015 Ionic Framework
Breizhcamp 2015 Ionic FrameworkStéphanie Moallic
 
Devoxx France 2015 - Introduction à Ionic framework
Devoxx France 2015 - Introduction à Ionic frameworkDevoxx France 2015 - Introduction à Ionic framework
Devoxx France 2015 - Introduction à Ionic frameworkStéphanie Moallic
 
Devoxx 2015, ionic chat
Devoxx 2015, ionic chatDevoxx 2015, ionic chat
Devoxx 2015, ionic chatLoïc Knuchel
 
Dev Fest Nantes - Ionic le développement hybride mobile fun et productif
Dev Fest Nantes - Ionic le développement hybride mobile fun et productifDev Fest Nantes - Ionic le développement hybride mobile fun et productif
Dev Fest Nantes - Ionic le développement hybride mobile fun et productifStéphanie Moallic
 
CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeadsRNS
 
Fastlane snapshot presentation
Fastlane snapshot presentationFastlane snapshot presentation
Fastlane snapshot presentationCocoaHeads France
 

Tendances (14)

Tap publisher par Frédéric Aloé
Tap publisher par Frédéric AloéTap publisher par Frédéric Aloé
Tap publisher par Frédéric Aloé
 
How javascript core helped PAW to move from a small app to an extensible tool
How javascript core helped PAW to move from a small app to an extensible toolHow javascript core helped PAW to move from a small app to an extensible tool
How javascript core helped PAW to move from a small app to an extensible tool
 
CocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par Celedev
 
La sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockLa sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de Bock
 
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015
 
iOSアプリケーションアーキテクチャ選定の鍵を探す
iOSアプリケーションアーキテクチャ選定の鍵を探すiOSアプリケーションアーキテクチャ選定の鍵を探す
iOSアプリケーションアーキテクチャ選定の鍵を探す
 
JHipster à Devoxx 2015
JHipster à Devoxx 2015JHipster à Devoxx 2015
JHipster à Devoxx 2015
 
Breizhcamp 2015 Ionic Framework
Breizhcamp 2015 Ionic FrameworkBreizhcamp 2015 Ionic Framework
Breizhcamp 2015 Ionic Framework
 
Devoxx France 2015 - Introduction à Ionic framework
Devoxx France 2015 - Introduction à Ionic frameworkDevoxx France 2015 - Introduction à Ionic framework
Devoxx France 2015 - Introduction à Ionic framework
 
Devoxx 2015, ionic chat
Devoxx 2015, ionic chatDevoxx 2015, ionic chat
Devoxx 2015, ionic chat
 
Android 6 marshmallow
Android 6 marshmallowAndroid 6 marshmallow
Android 6 marshmallow
 
Dev Fest Nantes - Ionic le développement hybride mobile fun et productif
Dev Fest Nantes - Ionic le développement hybride mobile fun et productifDev Fest Nantes - Ionic le développement hybride mobile fun et productif
Dev Fest Nantes - Ionic le développement hybride mobile fun et productif
 
CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeads Rennes #6
CocoaHeads Rennes #6
 
Fastlane snapshot presentation
Fastlane snapshot presentationFastlane snapshot presentation
Fastlane snapshot presentation
 

En vedette

En vedette (20)

Comment je ne rate plus mon train
Comment je ne rate plus mon trainComment je ne rate plus mon train
Comment je ne rate plus mon train
 
Gaikan
GaikanGaikan
Gaikan
 
Comment faire de HLS votre solution vidéo préférée ?
Comment faire de HLS votre solution vidéo préférée ?Comment faire de HLS votre solution vidéo préférée ?
Comment faire de HLS votre solution vidéo préférée ?
 
Safari app extensions cleared up by Sanaa Squalli
Safari app extensions cleared up by Sanaa SqualliSafari app extensions cleared up by Sanaa Squalli
Safari app extensions cleared up by Sanaa Squalli
 
Découvrir dtrace en ligne de commande.
Découvrir dtrace en ligne de commande.Découvrir dtrace en ligne de commande.
Découvrir dtrace en ligne de commande.
 
MVC-RS par Grégoire Lhotelier
MVC-RS par Grégoire LhotelierMVC-RS par Grégoire Lhotelier
MVC-RS par Grégoire Lhotelier
 
Alamofire
AlamofireAlamofire
Alamofire
 
Chainable datasource
Chainable datasourceChainable datasource
Chainable datasource
 
Un retour d'expérience sur Apple Pay
Un retour d'expérience sur Apple PayUn retour d'expérience sur Apple Pay
Un retour d'expérience sur Apple Pay
 
Rebranding an ios application
Rebranding an ios applicationRebranding an ios application
Rebranding an ios application
 
Introduction to WebRTC on iOS
Introduction to WebRTC on iOSIntroduction to WebRTC on iOS
Introduction to WebRTC on iOS
 
Project Entourage
Project EntourageProject Entourage
Project Entourage
 
BitTorrent on iOS
BitTorrent on iOSBitTorrent on iOS
BitTorrent on iOS
 
CloudKit as a backend
CloudKit as a backendCloudKit as a backend
CloudKit as a backend
 
Présentation de HomeKit
Présentation de HomeKitPrésentation de HomeKit
Présentation de HomeKit
 
What's new in iOS9
What's new in iOS9What's new in iOS9
What's new in iOS9
 
Programme MFI retour d'expérience
Programme MFI retour d'expérienceProgramme MFI retour d'expérience
Programme MFI retour d'expérience
 
SwiftyGPIO
SwiftyGPIOSwiftyGPIO
SwiftyGPIO
 
How to communicate with Smart things?
How to communicate with Smart things?How to communicate with Smart things?
How to communicate with Smart things?
 
IoT Best practices
 IoT Best practices IoT Best practices
IoT Best practices
 

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

Devoxx france 2015 livrer chaque jour ce qui est prêt
Devoxx france 2015   livrer chaque jour ce qui est prêtDevoxx france 2015   livrer chaque jour ce qui est prêt
Devoxx france 2015 livrer chaque jour ce qui est prêtbeastiefurets
 
la boite à outils de développements dans firefox devtools
la boite à outils de développements dans firefox devtoolsla boite à outils de développements dans firefox devtools
la boite à outils de développements dans firefox devtoolsChristophe Villeneuve
 
MinuteJS - DevFest Nantes - 2016
MinuteJS - DevFest Nantes - 2016MinuteJS - DevFest Nantes - 2016
MinuteJS - DevFest Nantes - 2016Fabien JUIF
 
Container Day 2016 - De la construction au déploiement d’applications avec de...
Container Day 2016 - De la construction au déploiement d’applications avec de...Container Day 2016 - De la construction au déploiement d’applications avec de...
Container Day 2016 - De la construction au déploiement d’applications avec de...Kodo Kojo
 
Des poneys à Liberation.fr
Des poneys à Liberation.frDes poneys à Liberation.fr
Des poneys à Liberation.frliberation_dev
 
Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...
Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...
Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...Christian Cousquer
 
Formation JavaScript full-stack (JS, jQuery, Node.js...)
Formation JavaScript full-stack (JS, jQuery, Node.js...)Formation JavaScript full-stack (JS, jQuery, Node.js...)
Formation JavaScript full-stack (JS, jQuery, Node.js...)guicara
 
Publier une application mobile en un clic
Publier une application mobile en un clicPublier une application mobile en un clic
Publier une application mobile en un clicFabernovel
 
Paris Container Day 2016 : De la construction au déploiement d’applications...
Paris Container Day 2016 :  De la construction au déploiement d’applications...Paris Container Day 2016 :  De la construction au déploiement d’applications...
Paris Container Day 2016 : De la construction au déploiement d’applications...Publicis Sapient Engineering
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileIppon
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéJulien Dubois
 
Continuous Delivery chez LesFurets -- Deep dive Dec 2015
Continuous Delivery chez LesFurets -- Deep dive Dec 2015Continuous Delivery chez LesFurets -- Deep dive Dec 2015
Continuous Delivery chez LesFurets -- Deep dive Dec 2015beastiefurets
 
soft-shake.ch - Distribution d'applications iPhone en Entreprise: Réalisation...
soft-shake.ch - Distribution d'applications iPhone en Entreprise: Réalisation...soft-shake.ch - Distribution d'applications iPhone en Entreprise: Réalisation...
soft-shake.ch - Distribution d'applications iPhone en Entreprise: Réalisation...soft-shake.ch
 
Géolocalisation, Speech, Intégration : Tirez parti des nouveautés de Windows ...
Géolocalisation, Speech, Intégration : Tirez parti des nouveautés de Windows ...Géolocalisation, Speech, Intégration : Tirez parti des nouveautés de Windows ...
Géolocalisation, Speech, Intégration : Tirez parti des nouveautés de Windows ...Microsoft
 
ASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSAASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSAFrédéric Sagez
 
La migration continue vers Symfony
La migration continue vers SymfonyLa migration continue vers Symfony
La migration continue vers SymfonyFrancois Zaninotto
 
Magento 2 : au-delà du changement de version, un changement de paradigme ?
Magento 2 : au-delà du changement de version, un changement de paradigme ?Magento 2 : au-delà du changement de version, un changement de paradigme ?
Magento 2 : au-delà du changement de version, un changement de paradigme ?The e-Commerce Academy
 

Similaire à L'intégration continue chez Pages Jaunes - Build Bot Mobile (20)

Devoxx france 2015 livrer chaque jour ce qui est prêt
Devoxx france 2015   livrer chaque jour ce qui est prêtDevoxx france 2015   livrer chaque jour ce qui est prêt
Devoxx france 2015 livrer chaque jour ce qui est prêt
 
Usine logicielle ios
Usine logicielle iosUsine logicielle ios
Usine logicielle ios
 
iGraal et les webextensions
iGraal et les webextensionsiGraal et les webextensions
iGraal et les webextensions
 
la boite à outils de développements dans firefox devtools
la boite à outils de développements dans firefox devtoolsla boite à outils de développements dans firefox devtools
la boite à outils de développements dans firefox devtools
 
MinuteJS - DevFest Nantes - 2016
MinuteJS - DevFest Nantes - 2016MinuteJS - DevFest Nantes - 2016
MinuteJS - DevFest Nantes - 2016
 
Container Day 2016 - De la construction au déploiement d’applications avec de...
Container Day 2016 - De la construction au déploiement d’applications avec de...Container Day 2016 - De la construction au déploiement d’applications avec de...
Container Day 2016 - De la construction au déploiement d’applications avec de...
 
Des poneys à Liberation.fr
Des poneys à Liberation.frDes poneys à Liberation.fr
Des poneys à Liberation.fr
 
Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...
Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...
Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...
 
Formation JavaScript full-stack (JS, jQuery, Node.js...)
Formation JavaScript full-stack (JS, jQuery, Node.js...)Formation JavaScript full-stack (JS, jQuery, Node.js...)
Formation JavaScript full-stack (JS, jQuery, Node.js...)
 
Publier une application mobile en un clic
Publier une application mobile en un clicPublier une application mobile en un clic
Publier une application mobile en un clic
 
Paris Container Day 2016 : De la construction au déploiement d’applications...
Paris Container Day 2016 :  De la construction au déploiement d’applications...Paris Container Day 2016 :  De la construction au déploiement d’applications...
Paris Container Day 2016 : De la construction au déploiement d’applications...
 
Html5 now light
Html5 now lightHtml5 now light
Html5 now light
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
 
Continuous Delivery chez LesFurets -- Deep dive Dec 2015
Continuous Delivery chez LesFurets -- Deep dive Dec 2015Continuous Delivery chez LesFurets -- Deep dive Dec 2015
Continuous Delivery chez LesFurets -- Deep dive Dec 2015
 
soft-shake.ch - Distribution d'applications iPhone en Entreprise: Réalisation...
soft-shake.ch - Distribution d'applications iPhone en Entreprise: Réalisation...soft-shake.ch - Distribution d'applications iPhone en Entreprise: Réalisation...
soft-shake.ch - Distribution d'applications iPhone en Entreprise: Réalisation...
 
Géolocalisation, Speech, Intégration : Tirez parti des nouveautés de Windows ...
Géolocalisation, Speech, Intégration : Tirez parti des nouveautés de Windows ...Géolocalisation, Speech, Intégration : Tirez parti des nouveautés de Windows ...
Géolocalisation, Speech, Intégration : Tirez parti des nouveautés de Windows ...
 
ASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSAASFA - Organisation et Méthodologie du projet COLSA
ASFA - Organisation et Méthodologie du projet COLSA
 
La migration continue vers Symfony
La migration continue vers SymfonyLa migration continue vers Symfony
La migration continue vers Symfony
 
Magento 2 : au-delà du changement de version, un changement de paradigme ?
Magento 2 : au-delà du changement de version, un changement de paradigme ?Magento 2 : au-delà du changement de version, un changement de paradigme ?
Magento 2 : au-delà du changement de version, un changement de paradigme ?
 

Plus de CocoaHeads France

Mutation testing for a safer Future
Mutation testing for a safer FutureMutation testing for a safer Future
Mutation testing for a safer FutureCocoaHeads France
 
Visual accessibility in iOS11
Visual accessibility in iOS11Visual accessibility in iOS11
Visual accessibility in iOS11CocoaHeads France
 
My script - One year of CocoaHeads
My script - One year of CocoaHeadsMy script - One year of CocoaHeads
My script - One year of CocoaHeadsCocoaHeads France
 
Ui testing dealing with push notifications
Ui testing dealing with push notificationsUi testing dealing with push notifications
Ui testing dealing with push notificationsCocoaHeads France
 
CONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANECONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANECocoaHeads France
 
L'intégration continue avec Bitrise
L'intégration continue avec BitriseL'intégration continue avec Bitrise
L'intégration continue avec BitriseCocoaHeads France
 
Build a lego app with CocoaPods
Build a lego app with CocoaPodsBuild a lego app with CocoaPods
Build a lego app with CocoaPodsCocoaHeads France
 

Plus de CocoaHeads France (14)

Mutation testing for a safer Future
Mutation testing for a safer FutureMutation testing for a safer Future
Mutation testing for a safer Future
 
iOS App Group for Debugging
iOS App Group for DebuggingiOS App Group for Debugging
iOS App Group for Debugging
 
Asynchronous swift
Asynchronous swiftAsynchronous swift
Asynchronous swift
 
Visual accessibility in iOS11
Visual accessibility in iOS11Visual accessibility in iOS11
Visual accessibility in iOS11
 
My script - One year of CocoaHeads
My script - One year of CocoaHeadsMy script - One year of CocoaHeads
My script - One year of CocoaHeads
 
Ui testing dealing with push notifications
Ui testing dealing with push notificationsUi testing dealing with push notifications
Ui testing dealing with push notifications
 
CONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANECONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANE
 
L'intégration continue avec Bitrise
L'intégration continue avec BitriseL'intégration continue avec Bitrise
L'intégration continue avec Bitrise
 
Super combinators
Super combinatorsSuper combinators
Super combinators
 
Design like a developer
Design like a developerDesign like a developer
Design like a developer
 
Handle the error
Handle the errorHandle the error
Handle the error
 
Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3
 
Build a lego app with CocoaPods
Build a lego app with CocoaPodsBuild a lego app with CocoaPods
Build a lego app with CocoaPods
 
Let's migrate to Swift 3.0
Let's migrate to Swift 3.0Let's migrate to Swift 3.0
Let's migrate to Swift 3.0
 

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

  • 1. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 1
  • 2. Intégra(on Con(nue @ PagesJaunes Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 2
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 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... Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 9
  • 10. 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
  • 11. Ce que l'on a mis en place Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 11
  • 12. Le Build Bot Mobile Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 12
  • 13. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 13
  • 14. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 14
  • 15. 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
  • 16. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 16
  • 17. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 17
  • 18. 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
  • 19. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 19
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 23
  • 24. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 24
  • 25. Notre solu*on aujourd'hui • Une solu*on SaaS (Bitrise) Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 25
  • 26. 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
  • 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 Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 27
  • 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(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 28
  • 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, ... Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 29
  • 30. 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
  • 31. Bitrise Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 31
  • 32. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 32
  • 33. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 33
  • 34. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 34
  • 35. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 35
  • 36. Plus de 60 intégra1ons vers des plateformes .erces Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 36
  • 37. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 37
  • 38. Quels tests ? Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 38
  • 39. Quels tests ? • Tests Unitaires (XCTest) Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 39
  • 40. 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
  • 41. 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
  • 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...) Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 42
  • 43. 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
  • 44. TL;DR Build 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
  • 45. Ques%ons ? Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 45
  • 46. Intégra(on con(nue @ PagesJaunes / CocoaHeads 9 juin 2016 / @jeffreymacko - @j_godon 46