Introduction à la mise en place d’une CI/CD avec Bitrise pour une application Flutter

Dans le vaste univers du développement mobile, les développeurs sont confrontés à une double responsabilité : satisfaire les exigences du client tout en garantissant la qualité du produit final. Pour atteindre cet objectif, l'automatisation des processus devient essentielle, notamment à travers la mise en place de l'intégration continue (CI) pour évaluer en permanence la qualité de leurs applications mobiles. De plus, afin d'optimiser les déploiements et de gagner un temps précieux, l'intégration d'une approche de déploiement continu (CD) via des outils spécialisés ou des plateformes dédiées devient incontournable. Dans cet article, nous explorons un cas d'utilisation concret impliquant Bitrise comme solution de CI/CD. Nous débuterons par une brève présentation des concepts de CI/CD, souvent évoqués mais parfois mal compris, puis nous comparerons deux outils populaires avant de plonger dans la mise en place étape par étape avec Bitrise.

CI/CD késako ? 

CI (Intégration Continue) est une pratique qui consiste à fusionner régulièrement les modifications de code dans un référentiel partagé, automatisant ainsi les processus de construction et de test des applications. Les tests réalisés pendant cette phase sont essentiels pour garantir la qualité du code. 

CD (Livraison Continue) automatise la livraison de l'application vers un environnement prédéfini, favorisant une cohérence dans la livraison du code entre les différents environnements de développement, de test et de production. Cela facilite la collaboration des équipes de développement sur des versions harmonisées de l'application.

Source : https://www.redhat.com/fr/topics/devops/what-is-ci-cd

Quel outil utiliser ? 

Sur le marché des outils de CI/CD, une multitude de choix s'offrent à nous, parmi lesquels figurent Jenkins, Bitrise, CodeMagic, Buddy, Azure DevOps, CircleCI, GitLab CI, Travis, et bien d'autres encore.

Bitrise se distingue par sa spécialisation dans les projets mobiles, offrant une configuration simplifiée grâce à un éditeur intuitif ou des fichiers YAML. Cette plateforme propose des intégrations préconfigurées pour les technologies mobiles courantes telles qu'Android et iOS, avec une interface conviviale qui facilite son adoption par les développeurs mobiles. De plus, Bitrise assure une gestion complète de son infrastructure, soulageant ainsi les équipes de développement de cette tâche et leur permettant de se concentrer sur la création d'applications.

Contrairement à d’autres outils qui exigent une configuration complexe et un suivi rigoureux, Bitrise offre une expérience plug-and-play spécifique au mobile..

Création du projet Bitrise

Lors de l'initialisation d'un projet sur Bitrise, vous serez invités à fournir plusieurs informations essentielles. Cela comprend le nom de l'application, l'URL du dépôt sur votre plateforme de gestion de code préférée (GitHub, GitLab, etc.), la branche par défaut à utiliser pour lancer les workflows, ainsi que le type de projet, impliquant le langage de programmation utilisé.

Pour en savoir plus, rendez-vous ici !

Pour créer une application sur Bitrise, les étapes sont conviviales. Après avoir sélectionné l'espace de travail désiré, le processus est intuitif. Bitrise vous demande notamment de : 

  • Fournir le lien vers le dépôt pour accéder au code source
  • Générer une clé SSH permettant à Bitrise d'accéder en lecture seule,
  • Définir une branche par défaut pour le premier workflow.

Spoiler alert: Au moment où vous allez rentrer un repository URL il va automatiquement être enregistré dans une variable d’environnement sous le nom : $GIT_REPOSITORY_URL

Une fois la configuration faite, nous verrons deux workflows (deploy & primary) créés par défaut par bitrise :

“Primary” est le workflow principal de votre projet Bitrise. Il est conçu pour contenir les étapes essentielles de votre processus de build et de test. Ce workflow est généralement utilisé pour effectuer des opérations telles que la compilation de votre application, l'exécution de tests unitaires ou d'intégration, la génération d'APKs ou d'IPA, et d'autres tâches fondamentales liées au développement de votre application.

Le workflow "Deploy" est généralement utilisé pour les tâches liées au déploiement et à la distribution de votre application. Cela peut inclure des étapes telles que :

  •  la signature et la distribution d'APKs ou d'IPAs vers des services de déploiement comme Google Play Store ou l'App Store d'Apple,
  • La publication de builds de test,
  • La mise à jour de documentation,
  • Ou encore toute autre action liée à la diffusion de votre application auprès des utilisateurs finaux ou des testeurs.

Ces deux workflows peuvent être personnalisés en fonction des besoins spécifiques de votre projet. Par exemple, vous pouvez ajouter, supprimer ou réorganiser des étapes pour répondre aux exigences de votre processus de développement et de déploiement. Ils offrent une structure de base pour organiser les différentes phases de votre pipeline CI/CD sur Bitrise. Cette structure sépare les tâches principales de développement des tâches de déploiement et de distribution.

Nous remarquons que la première étape d’activation de la clé SSH permet à Bitrise d’avoir accès à notre code source. Cette étape est facultative. Vous pouvez passer directement par l’URL http de votre projet. 

Et si mon projet intègre le 2FA ?

Si votre projet a activé le 2FA, il faudra générer un personal token à intégrer dans Bitrise.

Il faudra alors entrer l’URL manuellement sous le format suivant : https://[USERNAME]@gitlab.com/[USERNAME]/[PROJECT_NAME]

Bitrise vous demandera votre identifiant et le personal access token associé que vous aurez préalablement généré depuis votre compte Gitlab. 

On continue notre exemple concret ? Ok mais quel est l’objectif de notre CI/CD ici ?

Ajoutons un peu de contexte. L’application que nous allons récupérer ici est une application Flutter qui devra être distribuée sur les deux plateformes. Une particularité supplémentaire : c’est un monorepo

Dans le contexte d'un projet Flutter, il fait référence à une structure de dépôt unique (repository) qui contient l'ensemble des packages, des modules, ou des applications associées à un projet Flutter. Au lieu de diviser le code source en plusieurs dépôts distincts pour chaque module ou package, toutes les parties du projet sont regroupées dans un seul dépôt.

Dans un monorepo, vous pouvez donc avoir plusieurs applications, bibliothèques, ou modules Flutter qui partagent le même espace de versionnage et de gestion des sources. Cela peut faciliter la gestion des dépendances entre les différentes parties du projet, simplifier la coordination entre les équipes travaillant sur différentes parties du code, et permettre une réutilisation plus efficace du code. Le projet exemple se constitue donc de 

deux applications au sein du même dossier parent à savoir App_Mobile (application mobile), et App_Admin (back-office).

En résumé, un monorepo Flutter est une approche de gestion de code où l'ensemble des éléments constitutifs d'un projet Flutter sont hébergés dans un seul dépôt de code source.

Voyons, comment mettre en place cette CI/CD qui nous permettra de lancer nos tests, l’analyse statique de notre code ainsi que le déploiement vers Testflight pour IOS et vers Firebase App Distribution pour Android. Maintenant que ceci est posé, configurons notre workflow !

Bitrise step by step 

Et ensuite ? 

Il n’y a plus qu’à lancer notre workflow et le tour est joué. Néanmoins, si vous voulez l’intégrer pleinement dans votre processus de développement, il est préconisé de lancer ses différents workflows automatiquement. Cela tombe bien, Bitrise, via les Triggers, permet de lancer automatiquement un workflow donné après la réception d'événements comme le push sur une branche spécifique ou encore l’ajout d’un tag. Pour en savoir plus, c’est par ici !

Conclusion

Maintenant que vous savez créer un projet, configurer un workflow et le lancer automatiquement, vous avez toutes les clés pour mettre en place votre propre CI/CD. N’hésitez pas à voir toutes les possibilités qu’offre Bitrise via le Marketplace listant tous les steps et la documentation de chacune d’entre elles que fournit Bitrise. Mais voici quelques idées des fonctionnalités que vous pourrez explorer avec Bitrise pour aller plus loin :