Il y a 6 ans -
Temps de lecture 4 minutes
Advanced Fastlane avec dotenv
Dans un précédent article, Automatiser signature, testing et déploiement avec Fastlane, nous vous avons expliqué comment débuter avec Fastlane. Aujourd’hui nous vous montrons comment l’utiliser de manière avancée via la gestion des environnements avec dotenv.
dotenv
dotenv vous permet de gérer un projet multi-environnement au travers de fichiers.
Il vous suffit de passer --env
dans votre ligne de commande pour l’utiliser avec Fastlane.
[ruby]fastlane distribute –env prod[/ruby]
dotenv va alors charger les fichiers de configuration suivants (dans l’ordre) et ajouter les valeurs dans ENV
:
- .env
- .env.default
- .env.<line-option> (ici, .env.prod)
dotenv + fastlane
Prenons le Fastfile du précédent article et voyons comment utiliser dotenv pour gérer deux environnements :
- Préprod
- Prod
[ruby gutter= »true »]default_platform :ios
before_all do
# Slack
ENV["SLACK_URL"] = "XXX"
# Crashlytics / Fabric
ENV["CRASHLYTICS_API_TOKEN"] = "XXX"
ENV["CRASHLYTICS_BUILD_SECRET"] = "XXX"
end
lane :distribute do |options|
scan(code_coverage: true)
increment_build_number
sigh()
gym(scheme: monAppli)
crashlytics(notes: changelog_from_git_commits)
slack("Successfully deployed new App Update.")
commit_version_bump
push_to_git_remote(local_branch: ‘HEAD’, remote_branch: ‘master’)
end
private_lane :inc_build do
build_number = Time.new.strftime("%Y%m%d.%H%M")
version_number = Time.new.strftime("%Y.%m")
increment_build_number(build_number: build_number)
increment_version_number(version_number: version_number)
end[/ruby]
Valeurs communes
1ère étape : nous pouvons sortir nos variables ENV
pour les placer dans .env
:
[text]# Slack
SLACK_URL = "XXX"
# Crashlytics / Fabric
CRASHLYTICS_API_TOKEN = "XXX"
CRASHLYTICS_BUILD_SECRET = "XXX"[/text]
Nous pouvons également variabiliser :
- Le nom de notre application
- Les informations de versioning (git)
[java gutter= »true »]# utilisé par gym
GYM_SCHEME = monAppli
# utilisés par push_to_git_remote
FL_GIT_PUSH_LOCAL_BRANCH = HEAD
FL_GIT_PUSH_REMOTE_BRANCH = master[/java]
Ce qui nous donne le Fastfile suivant :
[ruby gutter= »true »]default_platform :ios
lane :distribute do |options|
scan(code_coverage: true)
increment_build_number
sigh()
gym()
crashlytics(notes: changelog_from_git_commits)
slack("Successfully deployed new App Update.")
commit_version_bump
push_to_git_remote()
end
private_lane :inc_build do
build_number = Time.new.strftime("%Y%m%d.%H%M")
version_number = Time.new.strftime("%Y.%m")
increment_build_number(build_number: build_number)
increment_version_number(version_number: version_number)
end [/ruby]
Appfile
Deuxième point important avant de pouvoir créer nos environnements : l’app identifier
. Sa valeur est définie dans Appfile de deux manières différentes :
- soit de manière statique
- soit en fonction de la lane executée
[ruby]# Solution 1
app_identifier "fr.xebia.monAppli"
# Solution 2
for_lane :distribute do
app_identifier "fr.xebia.monAppli"
end
for_lane :distribute_preprod do
app_identifier "xxx"
end[/ruby]
Problème : La solution 1 ne nous permet pas de définir un app identifier
par environnement. Quant à la solution 2, elle est inapplicable : nos utilisons les même lanes pour tous les environnements.
La solution la plus simple est de transformer app identifier
en variable d’environnement, pour pouvoir ensuite la définir dans nos .env
:
[java gutter= »true »]app_identifier ENV[‘APP_IDENTIFIER’][/java]
[java]# Valeur par défaut dans notre fichier .env
APP_IDENTIFIER = fr.xebia.monAppli[/java]
Environnements
Preprod
preprod a les caractéristiques suivantes :
- Son scheme (
GYM_SCHEME
) s’appelle monAppli-Preprod - Son provisioning profile s’appelle Mon Appli Preprod, et l’export (
GYM_EXPORT_METHOD
) est de type development - L’app identifier (
APP_IDENTIFIER
) est fr.xebia.monAppli.preprod
Voici le fichier .env.preprod
:
[java gutter= »true »]GYM_SCHEME = monAppli-Preprod
GYM_EXPORT_METHOD = development
APP_IDENTIFIER = fr.xebia.monAppli.preprod[/java]
Prod
prod a les caractéristiques suivantes :
- Son scheme (
GYM_SCHEME
) est monAppli - L’app identifier est fr.xebia.monAppli
Comme ce sont les valeurs par défaut définies dans notre fichier .env
, il n’y a rien à mettre dans celui de .env.prod
! Facile non ?
Aller plus loin
Jusqu’à présent les variables d’environnements que nous avons utilisées sont celles définies par Fastlane. Vous pouvez cependant très bien définir les vôtres.
Par exemple, avec la version actuelle du Fastfile nous ne sommes capables d’uploader que sur Fabric. Si nous souhaitons gérer ce dernier ainsi que iTunes, nous pouvons créer de nouvelles variables d’environnements :
[ruby gutter= »true »]default_platform :ios
lane :distribute do |options|
scan()
increment_build_number
sigh()
gym()
crashlytics(notes: changelog_from_git_commits) if ENV["UPLOAD_CRASHLYTICS"] == true
deliver() if ENV["UPLOAD_ITUNES"] == true
slack("Successfully deployed new App Update.")
commit_version_bump
push_to_git_remote()
end
[/ruby]
Nous pouvons ensuite définir UPLOAD_CRASHLYTICS
et UPLOAD_ITUNES
dans nos .
env.
[bash]UPLOAD_CRASHLYTICS = true[/bash]
[bash]UPLOAD_CRASHLYTICS = false
UPLOAD_ITUNES = true[/bash]
Conclusion
Vous savez maintenant utiliser Fastlane avec des environnements. En y regardant de plus près vous verrez que nous avons réussi à rendre générique notre Fastfile : il est agnostique de tout environnement. Nous avons un fichier Fastfile réutilisable sur tous nos projets !
Mais ce n’est pas tout, vous pouvez dorénavant définir et configurer autant d’environnements que vous le souhaitez. À vous les joies de dev, test, integ, pre-preprod, post-prod, … Enjoy!
Commentaire