Hermes: génération et déploiement d'ipa CocoaHeads Paris, jeudi 11 septembre if it's painful, do it often
Jun 03, 2015
Hermes: génération et déploiement d'ipa
CocoaHeads Paris, jeudi 11 septembre
if it's painful, do it often
iOS @ PagesJaunes• 5 applications
• 8 développeurs (3 internes) en 2 CT
• 300k VU par jour, 0.30% de crash
• Scrum, une release toute les 6 semaines
• TDD : "Tests Desired" Development (7% à 48% de couverture du code)
Encore une prez sur le déploiement ?
• 03/2014: Simone Civetta , TestFlight et les outils de distribution continue
• 12/2013: Rémy Virin , Continuous Integration from Unit Tests to Hardware
• 03/2013: Laurent Magnin , TestFlight
• 05/2012: Jacques Foucry , Build automatique et distribution OTA avec Xcode 4.x et Jenkins
• 05/2012: Gaël Durand & Jérémie Toudic: Intégration continue pour les nuls
Encore une prez sur le déploiement ?
• Oui, on a réinventé la roue
• Non, on n'est pas meilleur que TestFlight, HockeyApp ou autre. Bien au contraire \o/
• On a un workflow ... spécifique ;)
• C'est plus du retour d'expérience et de l'appel à témoignage/contribution que de la présentation de solutions «professionnelles»
En théorie
Dans la mythologie grecque, Hermès est une des divinités de l'Olympe. Il est le messager des dieux, donneur de la chance, l'inventeur des poids et des mesures, le gardien des routes et des carrefours, des voyageurs et du commerce. Il guide les héros et conduit leurs âmes aux Enfers.
Page d'Hermès sur Wikipedia FR
En pratique
Hermes, c'est: ! - une procédure manuelle - devenu script shell - placé dans un job jenkins, - bidouillé au petit bonheur la chance, - sorti depuis dans une gem - qui ne demande qu'à être une CLI respectable.
Historique (1/3)
Ma boite email est pleine
Archiver > Exporter AdHoc > Samba
C'est compliqué à installer via iTunes
C'est pas trop tôt !
Archiver > Exporter AdHoc > Email2011
On a codé un AppStore interne à la boite2012
Historique (2/3)On veut pouvoir tester sur tous les
serveurs (5 mini, pas de max) OK, on vous cache un menu de sélection dans l'appli pour passer d'un serveur à l'autre
Non, on veut un IPA par serveur...
C'est pas trop tôt !
OK, on tout mis dans jenkins, maintenant ça déploie en continu
Historique (3/3)
Euh, dans chaque ipa ?
Bon, ben on n'activera nos outils de validation que dans une version spécifique
On veut ajouter une librairie (vraiment) tierce pour faire des tests fonctionnels 2013
Non, non, dans un ipa dédié. Et pour chaque serveur bien sûr
On veut une application aussi rapide que l'éclair (pour faire le buzz)
2014
...
Pourquoi ?• Pour apprendre
• Pour pouvoir être utilisé aussi facilement en manuel qu'en déploiement continu, (un MacMini, ça peut lâcher)
• Parce que 4 schemes : Livraison, Validation, Ranorex, Release
• Pour mettre à jour le fichier PagesJaunes-Info.plist
• Pour utiliser notre AppStore maison
• Par "facilité"
Comment ?• Si ça sert à générer l'APP, c'est commité (PJPods)
• Si ça sert à génerer l'IPA, ce n'est pas commité
• Tout est (potentiellement) configurable dans un plist
• Indépendant (il faut juste un serveur web, version sans Parse possible)
• Tous les artefacts sont suffixés avec le SHA-1 du commit en cours
hermes -h• WIVEP (Work In Very Early Progress)
• git clone [email protected]:teriiehina/hermes.git
• gem build hermes.gemspec; gem install hermes-1.0.Z.gem
• 3 actions: build , upload , deploy
• un seul paramètre : le plist de déploiement
build• MAJ à jour de l'Info.plist et de l'icône avant génération de
l'ipa
• 4 schemes, 3 versions = 11 IPAs
• 12 minutes sur un MacPro
build
upload & deploy
• les IPA et les DSYM vont sur un serveur (en ssh),
• les plists sur un autre (en ftp) (merci iOS7.1)
• Ajout d'entrées dans parse.com pour le DTAppStore
• On ne peut pas accéder à l'API Parse depuis le réseau d'entreprise
tl;dl*• `git clone` doit suffir à compiler
• Punissez quelqu'un en lui faisant faire une prez/ étude sur le déploiement
• Faites tourner les déploiements
• Feature flipping is fun
• mdimport -g /Applications/Xcode.app/Contents/Library/Spotlight/uuid.mdimporter ~
*too long, didn't listen
Shameless plug
• Peter, @teriiehina
• Lead Dev iOS chez PagesJaunes avec @j_godon
• BreakPointFM avec @jeffreymacko
http://www.breakpoint.fm