Développer une CI/CD Flutter sous Firebase
Flutter est un framework développé par Google qui permet de concevoir des applications Android, iOS et des sites web à partir d'une seule base de code. Si vous découvrez Flutter, n'hésitez pas à consulter notre article Flutter : A Song of iOS and Android en guise d'introduction. Aujourd'hui, cependant, nous allons voir comment développer une CI/CD Flutter sous Firebase.
Mais c'est quoi une CI/CD ? CI/CD, l'acronyme de continuous integration/continuous delivery, est le concept permettant d'automatiser toutes les étapes de développement.
Dans notre cas, nous voulons pousser notre code sur notre repository et qu'une suite d'étapes se déclenchent en suivant ces étapes :
- Lancement des tests de l'application
- Lancement d'un build de l'application
- Lancement d'un déploiement de l'application (Play Store, App Store, Firebase etc ...)
Si une des étapes échoue, nous devons être alertés pour pouvoir apporter les corrections nécessaires. Plusieurs outils permettent de créer une CI/CD fonctionnelle :
- GitLab CI
- Jenkins X
- Codemagic
- Travis CI
- ...
Pré-requis pour cet article
Pour avoir une CI/CD fonctionnelle nous aurons besoin
- d'une application Flutter (qui compile en local de préférence)
- d'un compte Firebase - pour le dépôt des applications
- d'un téléphone Android
- d'un iPhone
- ATTENTION : IL EST OBLIGATOIRE D'AVOIR UN MAC POUR LA COMPILATION iOS
Etape 1 : Lancement des tests
Dans cette première étape, nous allons exécuter les tests unitaires de notre application Flutter.
L’étape de lancement des tests concerne uniquement les tests unitaires de Flutter (Dart) et ne lance pas de test spécifique Android ou iOS. Tous les tests unitaires sont regroupés dans le dossier "test" à la racine du projet.
L'étape des tests s’exécute en utilisant cette commande :
Bash
On peut lancer des tests unitaires avec un fichier spécifique :
Bash
Etape 2 : Lancement des compilations
Dans cette seconde étape, nous allons compiler notre application Flutter. La compilation d'une application Flutter est différente entre Android et iOS.
Compilation Android nous avons deux possibilités :
- Générer un fichier .apk qui est en réalité un dossier compressé avec tous les fichiers buildés de l'application Android.
- Générer un fichier .aab, Un fichier .aab ce nomme un AppBundle qui est un format de publication. Google utilise un AppBundle pour générer et diffuser des fichiers APK optimisés en fonction du téléphone de l'utilisateur.
Android - Génération d'une APK
Bash
L'APK généré sera dans le dossier projet/app/outputs/apk/release/
Android - Génération d'une App Bundle (incompatible avec Firebase)
Bash
Le bundle généré sera dans le dossier projet/app/outputs/bundle/release
Compilation iOS
iOS - Génération d'une IPA
Bash
Note : à la fin de la compilation Flutter iOS nous devons convertir le .app en .ipa
Actuce : On peut nommer nos versions pour avoir un meilleur rendu en utilisant ces paramètres :
build-number=1.0.10
build-name=1.0.10
ex :
flutter build ios --build-name=1.0.10 --build-number=1.0.10
flutter build apk --build-name=1.0.10 --build-number=1.0.10
Seul les numéros, les points et les tirets sont acceptés pour les versions iOS
Etape 3 : Déploiement sur Firebase
Dans cette dernière étape, nous allons exécuter déployer notre application Flutter.
Pour cet article nous utiliserons Firebase pour le déploiement de l'application. Firebase est une plateforme regroupant un ensemble de services, dont la possibilité de stocker/déployer des applications mobiles (Android et iOS). Le principe est simple à la fin de la compilation du projet Flutter, une APK ou IPA sera générée puis déposée dans Firebase (au niveau du service App Distribution de Firebase cf).
Android - Déploiement d'une APK via l'interface graphique
Android - Déploiement d'une APK
Bash
iOS- Déploiement d'une IPA
Bash
Vous devez remplacer les variables des commandes précédentes par ces valeurs :
APP_ID_FIREBASE_ANDROID : ID de l'application (Attention il faut avoir créé une Application Android sur Firebase pour récupérer son ID de l'application)
FIREBASE_TOKEN : Token généré via CLI
Par la suite un email sera envoyé pour tester votre application
Cliquer sur "Get Setup" puis suivez la procédure pour pouvoir installer "App tester". App Tester est une application pour télécharger les différentes versions de votre application Flutter qui sont déposées dans l'App distribution de Firebase et dont vous avez l'autorisation pour la télécharger.
Il suffit maintenant de choisir votre version et de cliquer sur "Download".
Exemple d'une CI/CD dans GitLab
Nous avons développer une CI/CD en utilisant GitLab, retrouvez notre code en open source sur GitHub.
Plusieurs choix s'offrent à vous dans cet exemple :
- Vous pourrez faire une CI/CD seulement pour Android
- Vous pourrez faire une CI/CD pour Android et iOS
Dans notre exemple nous n'avons pas utilisé Fastlane qui offre davantage de fonctionnalités.
Fastlane est un outil permettant de gérer le déploiement des applications mobiles (Android et iOS), il est compatible avec le Play Store, Firebase et App Store. Il gère toutes les tâches fastidieuses, comme la génération de captures d'écran, la signature de code et la publication de votre application.
------------------------------
Article rédigé par Steven, Lead Dev Full Stack chez ESENS | Retrouvez tous nos articles sur le Blog ESENS
Vous êtes à la recherche d'un nouveau challenge ? Rejoignez l'équipe ESENS en postulant à nos offres d'emploi !