Photo par pxhere.com

Gérez automatiquement la version de votre application en utilisant Git et Azure DevOps

Gagnez du temps lors du déploiement d'une nouvelle version de votre application !

Créé par Damien Aicheh le 19/12/2019 · 6 mins

Lors du développement d’une application, vous devez toujours gérer différents environnements et versions pour votre application. Pour livrer une nouvelle version de votre projet, une façon de le faire serait:

  • Mettre à jour la version de votre application dans le code
  • Commiter votre code
  • Ajoutez un nouveau tag de version à votre répertoire Git
  • Lancez votre pipeline pour générer votre nouveau package d’application

Ce type de process est trop long et sujet aux erreurs, alors que la seule chose que vous voulez est d’avoir la même version entre votre tag Git et votre package d’application livré. Alors pourquoi ne pas simplement lire le tag Git ?

Présentation des Mobile Versions tasks

Pour résoudre ce problème, j’ai développé un nouvel ensemble de tasks Azure DevOps appelé Mobile Versioning, facile à utiliser dans votre pipeline et gratuit. Ce groupe de tasks permet d’extraire la version d’un tag de votre répertoire Git et d’appliquer cette version à votre application mobile comme vous le souhaitez.

Usage

Tout d’abord, accédez à votre Azure DevOps et installez l’extension Mobile Versioning dans votre organisation.

Mobile Versioning Tasks

Extraire la version depuis le tag

Ce groupe contient plusieurs tasks, la plus importante est la ExtractVersionFromTag. Pour l’utiliser dans votre azure-pipelines.yml il vous suffit de l’appeler comme ceci:

- task: ExtractVersionFromTag@1
  inputs:
    projectFolderPath: '$(Build.SourcesDirectory)' # Optional. Default is: $(Build.SourcesDirectory)
    tagPrefixMatch: 'my_prefix' # Optional. Used to filter tags with a prefix. Ex: dev_

Cela extraira la version du dernier tag que vous avez poussé sur votre répertoire Git, sur la branche que vous avez sélectionnée pour builder votre pipeline.

Par exemple, si vous avez un tag avec une valeur de v1.2.3 ou 1.2.3, cela affectera automatiquement les variables globales $(MAJOR) à 1, $(MINOR) à 2 et $(PATCH) à 3. De plus, cette task calculera le nombre de commits depuis le premier commit de votre branche jusqu’au tag et assignera cette valeur à $(NUMBER_OF_COMMITS) et si vous ne voulez que le nombre de commits depuis votre tag, vous pouvez utiliser $(NUMBER_OF_COMMITS_SINCE_TAG). Ces 4 variables seront alors utilisables dans votre azure-pipelines.yml.

L’extension prend également en charge les tags de pré-version, donc si vous avez une version alpha comme celle-ci: v1.2.3-alpha6 l’alpha6 sera assigné à la variable $(PRE_RELEASE) et vous pouvez l’utiliser comme les précédentes.

Par convention, les tags Git sont définis comme suit: v(Major).(Minor).(Patch). Mais la task ExtractVersionFromTag gère également les tags définies sans le préfixe v.

Cette task peut être utilisée quelle que soit la technologie que vous utilisez pour vos pipelines Azure DevOps.

Mettre à jour la version de votre application mobile

Les tasks de Mobile Versioning fournissent actuellement 3 tasks pour aider les développeurs mobiles à mettre à jour automatiquement les versions de leurs applications iOS et Android quelle que soit la technologie mobile que vous avez utilisée.

  • UpdateiOSVersionInfoPlist pour le Info.plist
  • UpdateAndroidVersionManifest pour le AndroidManifest.xml
  • UpdateAndroidVersionGradle pour le build.gradle dans le dossier app

Ces tasks peuvent être utilisées avec ou sans utiliser la task ExtractVersionFromTag avant.

Pour mettre à jour automatiquement la version de votre application, il vous suffit d’ajouter ces tasks après avoir utilisé la task ExtractVersionFromTag:

Pour iOS pour mettre à jour le Info.plist:

- task: UpdateiOSVersionInfoPlist@1
  inputs:
    infoPlistPath: 'your_project/Info.plist'
    bundleShortVersionString: '$(MAJOR).$(MINOR).$(PATCH)-$(PRE_RELEASE)' # Optional. Default is: $(MAJOR).$(MINOR).$(PATCH)
    bundleVersion: '$(NUMBER_OF_COMMITS)' # Optional. Default is: $(NUMBER_OF_COMMITS)

Pour Android:

Si vous devez mettre à jour le AndroidManifest.xml:

- task: UpdateAndroidVersionManifest@1
  inputs:
    androidManifestPath: 'your_project/AndroidManifest.xml'
    versionName: '$(MAJOR).$(MINOR).$(PATCH)-$(PRE_RELEASE)' # Optional. Default is: $(MAJOR).$(MINOR).$(PATCH)
    versionCode: '$(NUMBER_OF_COMMITS)' # Optional. Default is: $(NUMBER_OF_COMMITS)

Si vous devez mettre à jour le build.gradle dans le dossier app:

- task: UpdateAndroidVersionGradle@1
  inputs:
    buildGradlePath: 'your_project/app/build.gradle'
    versionName: '$(MAJOR).$(MINOR).$(PATCH)-$(PRE_RELEASE)' # Optional. Default is: $(MAJOR).$(MINOR).$(PATCH)
    versionCode: '$(NUMBER_OF_COMMITS)' # Optional. Default is: $(NUMBER_OF_COMMITS)

Personnalisez la version

Notez que pour ces 3 tasks, vous pouvez remplacer la valeur par défaut des propriétés par exemple au lieu de:

bundleShortVersionString: '$(MAJOR).$(MINOR).$(PATCH)'

vous pouvez la concaténer avec une variable que vous avez précédemment définie:

bundleShortVersionString: '$(MAJOR).$(MINOR).$(PATCH)-$(PRE_RELEASE)-($(NUMBER_OF_COMMITS))'

ou l’utiliser simplement comme ceci:

bundleShortVersionString: '1.2.3'

Touche finale

Ce projet est un premier point de départ pour aider les développeurs à gérer les versions de leurs applications. N’hésitez pas à contribuer à ce projet si vous le souhaitez.

Vous trouverez des exemples d’utilisation sur le répertoire Github du projet.

Happy coding !

N'hésitez pas à me suivre sur pour ne pas rater mon prochain tutoriel !