Photo par pxhere.com

Comment utiliser des variables dans vos builds Azure DevOps

Astuces pour utiliser correctement les variables dans vos builds.

Posted by Damien Aicheh on September 02, 2019 · 5 mins

Lorsque vous créez une build dans Azure DevOps, vous avez toujours une configuration à passer pour générer votre package d’application. Cette configuration peut avoir des variables telles que, les variables d’environnement, le chemin du dossier, logins, mots de passes…

Par défaut, toutes ces configurations sont directement définies dans votre fichier azure-pipeline.yml. Ce dernier sera enregistré dans votre répertoire de code source. C’est une bonne chose de conserver toutes vos configurations de builds avec votre projet, mais comme vous pouvez l’imaginer, les mots de passes ne doivent pas être sauvegardés en clair dans votre répertoire de code source pour des raisons de sécurité. C’est là que les variables entrent en jeu.

Comment utiliser les variables ?

Vous avez de multiples possibilités, vous pouvez utiliser des variables directement sur votre fichier azure-pipeline.yml comme ceci:

variables:
  configuration: release
  platform: x64

Ou vous pouvez utiliser les Variable groups comme ceci:

variables:
    - group: your-variable-group

Si vous voulez utiliser les deux, vous devez le déclarer comme ceci:

- group: your-variable-group
- name: configuration
  value: release
- name: platform
  value: x64

Dans ce cas vous devrez utiliser les balises name/value pour les variables non groupées.

Créer un groupe de variables (Variable groups)

Tâche de signature

Prenons un exemple avec une tâche de signature pour Android:

- task: AndroidSigning@3
 inputs:
   apkFiles: '**/*.apk'
   apksign: true
   apksignerKeystoreFile: 'production.keystore'
   apksignerKeystorePassword: 'keystorepwd'
   apksignerKeystoreAlias: 'key0'
   apksignerKeyPassword: 'aliaspwd'
   apksignerArguments: --out $(outputDirectory)/app.release.apk
   zipalign: true

Comme vous pouvez le voir ci-dessus, nous avons des valeurs telles que:

  • Le mot de passe de l’alias
  • Le mot de passe du keystore

Ces valeurs ne doivent pas être lisibles directement dans la définition du build. Passons donc par les variable groups.

Configuration du variable groups

Pour le configurer, allez dans Pipelines > Library > Variable groups et créez un nouveau Variable group.

Donnez-lui d’abord un nom, par exemple: android-build-variables. Gardez à l’esprit que ce nom sera utilisé dans votre azure-pipeline.yml, évitez donc d’utiliser des espaces, il sera plus facile à utiliser. Ajoutez ensuite vos variables avec un nom et la valeur associée.

Voici ce que nous avons pour notre exemple:

Example Variable groups

Lorsque vous écrivez un mot de passe, vous devez cliquer sur le bouton du cadenas pour le masquer aux autres utilisateurs. Attention, si vous cliquez à nouveau sur ce bouton, la valeur du mot de passe sera supprimée pour des raisons de sécurité. Vous devrez donc le réécrire à nouveau.

Désactivez l’option Allow access to all pipelines, les variable groups doivent être utilisés uniquement par votre build.

N’oubliez pas de le sauvegarder avant de revenir à votre build.

Chargez votre variable groups

Nous allons maintenant charger le variable groups avant la balise steps et appeler chacune des variables que nous venons de créer en utilisant la syntaxe suivante: $(my_variable_name).

Voici l’exemple mis à jour:

variables:
  - group: android-build-variables

steps:

#...

- task: AndroidSigning@3
  inputs:
    apkFiles: '**/*.apk' 
    apksign: true
    apksignerKeystoreFile: 'production.keystore'
    apksignerKeystorePassword: $(keystore.password)
    apksignerKeystoreAlias: $(key.alias)
    apksignerKeyPassword: $(key.password)
    apksignerArguments: --out $(outputDirectory)/app.release.apk
    zipalign: true

Lorsque vous exécuterez votre build pour la première fois, vous obtiendrez une erreur comme celle-ci:

Message d'erreur

Cela vous indique que votre build n’a pas accès à votre variable groups, cliquez simplement sur le bouton Authorize resources et redémarrez votre build.

Si vous regardez les logs du build, vous verrez que les mots de passes que vous avez transmis sont automatiquement remplacés par ***.

Touche finale

Vous pouvez ajouter autant de variables que vous le souhaitez dans votre variable groups, même s’il ne s’agit pas d’un mot de passe. N’oubliez pas que l’écriture d’un fichier azure-pipeline.yml est similaire à l’écriture de code. La duplication n’est pas une bonne chose. Il est préférable d’utiliser des variables globales si vous le pouvez.

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