LE rêve de tous développeurs Android : pouvoir publier son application automatiquement sur le Play Store directement depuis son serveur d’intégration continue !
Et c’est possible. Avec Gitlab et l’utilisation du couple Docker/Fastlane. Il existe un tutoriel très bien fait en anglais sur le sujet (https://about.gitlab.com/blog/2019/01/28/android-publishing-with-gitlab-and-fastlane/), toutefois j’ai buté sur certaines parties avant de réussir à réaliser cette publication automatique.
Mise en place de Fastlane : j’ai naïvement cru au départ que ce serait possible sans faire d’installation en local. Et bien oui et non. C’est nécessaire pour initialiser les données de version (et les mettre en gestion de configuration), mais c’est une information qui peut être désactivée dans la partie publication. Et c’est bien utile pour comprendre la configuration à mettre en place pour gérer les mots de passe et fichiers de sécurité (keystore). Alors pour éviter une installation locale, voici la configuration à faire pour fastlane (mise à jour suite aux évolutions de la version de fastlane et en bonus la gestion fine des informations à mettre à jour = upload des images, changelogs, etc.) :
desc "Promote Internal to Alpha" lane :promote_internal_to_alpha do |options| versions = google_play_track_version_codes(track: "internal") version_code = versions[0] upload_to_play_store(track: 'internal', track_promote_to: 'alpha', skip_upload_apk: true, skip_upload_aab: true, skip_upload_metadata: true, skip_upload_images: true, skip_upload_screenshots: true, skip_upload_changelogs: false, version_code: version_code) end
C’est un exemple de configuration pour publier automatiquement une version interne de votre application en tant que version alpha. La version est extraite automatiquement de la liste des versions internes (par contre c’est forcément la dernière version disponible qui est utilisée). Et toutes les informations sont laissées en l’état sauf le changelog.
La gestion des éléments secrets : c’est un autre point important. En effet, ce n’est pas possible de simplement les fournir en dur dans la configuration (mots de passe par exemple) ou de les stocker dans en gestion de configuration avec le code source. Sinon, pourquoi s’embêter avec la sécurité ?
Cette question est encore plus pertinente lorsque nous devons gérer la signature de notre apk (ou aab) puis une connexion automatique au Play Store depuis l’intégration continue. Pour cela, l’astuce fournie est tout simplement “magique” : transformer le keystore en affichage hexadécimal pour le fournir ensuite sous forme de variable d’environnement. Brillant !
L’outil magique est xxd.
- Pour passer du fichier keystore à l’affichage hexadécimal (enfin, je préfère le mettre dans un fichier texte pour pouvoir faire un copier-coller plus facilement du contenu).
xxd -p your_keystore.jks > your_jks_file_hex.txt - Pour passer de la variable d’environnement au fichier keystore, c’est tout simplement l’opération inverse.
echo “$signing_jks_file_hex” | xxd -r -p – > your_keystore.jks
Pour la clé permettant de se connecter au Play Store, comme elle est fournie également au format json (c’est déjà du texte). Nous collons son contenu dans un variable d’environnement également.
echo $google_play_service_account_api_key_json > ~/google_play_api_key.json
Ensuite, il ne reste plus qu’à tester toutes ces configurations depuis une branche dédiée. Cela peut parfois prendre du temps. Notamment à cause des problèmes de copier-coller du contenu du fichier keystore. Il m’est arrivé de “perdre” la fin du fichier lors de cette étape. En retirant mes moufles, et en prenant directement la sortie console du xxd (plutôt que le fichier texte) cela marche beaucoup mieux.
Finalement, cette configuration permet de s’affranchir du stockage du keystore sur sa machine. Notamment pour le travail d’équipe : ainsi tout le monde est capable de publier une version de manière autonome 🙂
One response to “Android: publier son application sur le Play Store via Gitlab”
I appreciate you sharing this blog post. Thanks Again. Cool.