Quand on pense DevOps on pense souvent Cloud, Infra, Web, Backend, mais le monde du mobile a ses propres contraintes et ses propres outils. Nous allons voir quels sont les critères qui vont nous permettre de choisir la plateforme idéale.
Plusieurs questions viennent en tête au moment de choisir la meilleur plateforme, comme est-ce que la solution répond à l’ensemble de mes besoins ? Combien ça va me coûter ? Quelles ressources seront nécessaires pour faire tourner le bouzin ? Combien de temps ça va faire gagner à mes équipes (ROI pour les businessmen) ? Qui contacter en cas de pépin ? Comment assurer la pérennité de mon investissement ? Et j’en passe !
On vous propose de répondre à ces questions via un Benchmark maison !
Quelques bases
Pour commencer (parce qu’il faut bien commencer quelque part), qu’est-ce qu’on entend par CI/CD et par Mobile ?
1 ) D’après Wikipédia, l’intégration continue est un ensemble de pratiques utilisées en génie logiciel consistant à vérifier à chaque modification de code source que le résultat des modifications ne produit pas de régression dans l’application développée.
En résumé dans notre contexte, ça veut dire qu’on veut builder nos applications, vérifier que la qualité du code est bonne, que nos fonctionnalités sont utilisables via des tests automatisés et que l’on est capable de publier tout ça à nos utilisateurs automatiquement.
À date, les principales plateformes disponibles sont :
Présentation des plateformes pour ceux qui ne les connaissent pas :
Dans leurs modes de fonctionnement on peut regrouper ces plateformes selon 3 catégories :
- Packagés : Bitrise, App Center, Codeship
- Modulaires : Travis CI, Circle CI, Github Actions
- On-Premise : Jenkins, Gitlab CI, TeamCity
2) Mobile, toujours d’après Wikipédia, qualifie tout objet apte à se déplacer.
Bon ça va pas nous aider… On va vous donner notre version ; par technologies mobiles on entend les principaux moyens de créer une application mobile à faire tourner sur vos précieux smartphones (du coup je parle pas de Windows Phone 😉 ).
De nos jours, actuellement, en 2019, au jour d’aujourd’hui, ça veut dire :
Android Natif, iOS Natif, Cordova (et bien souvent Ionic), React Native, Flutter, Xamarin à la limite, et point barre.
Notez que l’on a aussi besoin des outils qui les accompagnent, dont : XCode, le SDK Android, les différents frameworks que vous utilisez, plus les utilitaires dont vous pourriez avoir besoin (Git, Java, Gradle, Ruby, CocoaPods, etc…).
Quelques chiffres sur le monde du mobile pour ceux que ça intéresse :
Maintenant qu’on a dit ça, voyons comment affiner notre choix en fonction de nos besoins.
Le “Qui est-ce” des plateformes d’intégration continue
Est-ce qu’il est roux ? Non ? Ok je retire Gitlab CI.
Plus sérieusement, la première question à se poser est : quelles sont les technologies que la plateforme doit supporter ?
Rien de mieux qu’un bon vieux tableau comparatif pour représenter ça.
Nous avons testé pour vous l’ensemble des plateformes, mais dans un souci de temps de lecture nous allons passer directement aux conclusions.
Suite à notre analyse et comme le montre bien le tableau ci-dessus, il ressort d’emblée que TeamCity et Codeship ne sont pas du tout adaptés au monde du Mobile.
Ensuite, en considérant nos 4 critères de départ, plus le titre de cet article, on peut également dire que les plateformes On-Premise ne nous semblent pas adaptées. Non pas qu’elles ne soient pas performantes bien au contraire, nous en avons mises en place chez de nombreux clients et continuons à les utiliser, mais à moins que vous n’ayez un plateau de 20 développeurs, des budgets importants et des équipes dédiées à leur mise en place/administration/maintenance je ne pense pas que ces solutions soient faites pour vous (si c’est votre cas contactez-nous, on peut vous aider!).
Les plus du On-Premise
- Comme leurs noms l’indiquent elles sont “On-Premise” ce qui par définition veut dire que vous pouvez les faire tourner directement chez vous. On retrouve souvent ce genre de besoin lorsqu’on a des problématiques de sécurité et de confidentialité des données (banque, assurance, etc…).
- Les 3 plateformes offrent une architecture master/slave qui permet de scaler votre infra et de monter en charge facilement
- Et enfin ces outils sont plus des Orchestrateurs que des plateformes de CI/CD donc pas directement liés à des langages ou à des outils. Ils disposent d’une grande communauté et proposent des adapteurs/plugins pour la plupart des outils dont vous pourriez avoir besoin, vous ne devriez donc pas être bridés dans leur utilisation
Les moins du On-Premise
La gestion de l’infrastructure est à votre charge, même si c’est un aspect positif pour certains cela représente un coût important autant en matériel qu’en ressources humaines.
Le fait de devoir gérer des applications iOS par exemple nécessite du matériel qui coûte cher.
D’expérience un Mac Mini est rarement suffisant donc il vous faudra regarder du côté des Mac Pro : ticket d’entrée 3 300€ minimum
En terme de Run ça vous fait un outil de plus à faire tourner et à administrer, ce qui entraine également des problèmes de gouvernance.
Spécificité de Gitlab CI, vous restez dans l’univers Gitlab, impossible de connecter une autre source de code (comme Github ou BitBucket par exemple).
Pour finir notre “Qui est-ce?”, Travis CI, Github Actions et Circle CI étant très similaires dans leur approche
nous n’allons conserver que Travis CI pour la catégorie des outils Modulaires.
Bitrise, App Center et Travis CI
sont donc les finalistes pour notre Benchmark !
Benchmark : Le Podium final
On a fait 80% du boulot en répondant aux questions précédentes maintenant, comme le veut la loi de Pareto, les ennuis commencent ! Pour simplifier je vous ai mis à disposition un repo Android pour faire un cas concret d’utilisation.
Pour départager nos finalistes on a isolé 5 critères :
- Plug & Play (Facilité de mise en place / d’utilisation / de maintenance)
- Performances (scalabilité / vitesse d’execution / temps de build)
- Interconnection avec vos outils préférés (Github/Gitlab/BitBucket, Slack, SonarQube, App Stores, etc…)
- Communauté (support / documentation / open-source)
- Prix (of course)
1. BITRISE
- Plug & Play : L’interface web a quelques loupés mais ils proposent : détection automatique de la techno, stack customizable, interface de création de workflow en mode WYSIWYG, c’est top !
- Performances : Temps de boot des VM assez long, plus y’a de steps dans vos workflows plus c’est lent. C’est pas son point fort !
- Interconnection : 180+ intégrations open-source ! Possibilité d’écrire soit même ses scripts, les possibilités sont infinis !
- Communauté : La communauté est grandissante et le support via le Chat est génial. Ils vont jusqu’à debugguer ton App
- Prix : Premier prix = Free limité à 10mins de build, ensuite c’est fonction de la puissance des machines et du nombre de builds concurrents que vous voulez. Plus vous avez d’apps plus c’est salé ! Avec 100€/mois on commence vraiment à jouer
2. TRAVIS CI
- Plug & Play : Des stacks dédiées au mobile existent et la plupart des paramètres spécifiques sont customizables. Très flexible mais pas vraiment simple à mettre en place dès qu’on veut faire des choses un peu avancées (publication sur les stores par exemple). YAML de mon POC ici.
- Performances : 4mins de build. Plutôt bien. Possibilité de fournir ses propres images Docker pour les Builds. Possibilité de jouer des jobs en parallèle. Même si les VM peuvent être un peu longue à boot.
- Interconnection : Une liste d’add-ons est proposée mais à part SonarCloud je n’ai pas trouvé grand chose d’intéressant…
- Communauté : Il existe un forum dans lequel vous pouvez créer des tickets de demande d’aide mais ça ne va pas plus loin !
- Prix : Gratuit pour les projets Open-Source ! Sinon toujours le même principe de builds concurrents. Premier prix 69$/mois.
3. APP CENTER
Impossible de faire des pages publiques… DM pour que je vous ajoute sur ma Team App Center
- Plug & Play : l’intégration est assez simple par contre on ne peut quasiment rien customizer. Il faut que vos App soient standards de chez standards.
- Performances : 3mins pour le build Android, c’est le grand gagnant, par contre on ne sait pas sur quelles machines tournent les builds. Impossible de choisir la stack d’execution à date (cf Roadmap).
- Interconnection : Microsoft Teams, Slack, et c’est tout.
- Communauté : le produit est assez peu utilisé et il n’existe pas de support à part des Github issues.
- Prix : Gratuit dans la limite de 240mins de build/mois puis 40$/concurrence
Conclusion
Comment bien choisir sa CI/CD Mobile en 2019 ?
- La première réponse : Ce n’est pas à moi de vous dire quelle solution choisir.
- La réponse de Normand : Ça dépend de vos besoins et de vos moyens.
- La réponse terre à terre : pour un contrôle total de votre outil préférez Jenkins (ou Gitlab CI si votre entreprise utilise déjà Gitlab). Si vous voulez mutualiser votre CI avec du Web ou du Back un outil comme TravisCI ou CircleCI répondra surement à la plupart de vos besoins. Et enfin si vous voulez juste appuyer sur des boutons et utiliser des connecteurs tout faits mieux vaut partir sur Bitrise, ou App Center si vous êtes déjà chez Microsoft !
- La réponse D : personnellement je ne peux plus me passer de la flexibilité de Bitrise ! De plus ils connaissent une forte croissance et un taux d’adoption énorme sur les plus gros plateaux de Dév mobile et viennent de lever 20M.