Photo par Timothy Dykes

Gérez vos demands de manière dynamique avec Azure DevOps

Spécifiez facilement vos demands

Créé par Damien Aicheh le 10 December, 2020 · 6 mins

Lors du développement de vos projets et de l’utilisation d’Azure DevOps pour vos pipelines, vous avez probablement remarqué que tester la compatibilité de votre projet avec la dernière version des outils et des logiciels pouvait être délicat. Vous devez commencer par modifier vos pipelines YAML et modifier les demands pour cibler la dernière version dont vous avez besoin. Dans ce tutoriel, nous allons voir comment déclarer vos demands afin qu’elles puissent être modifiées facilement sans mettre à jour votre pipeline YAML.

Quelles sont les demands ?

Les demands sont utiles pour définir une liste de fonctionnalités dont l’agent de build doit disposer pour exécuter vos pipelines. Par exemple, assurez-vous que:

  • un SDK spécifique est installé
  • le projet sera compilé avec une version spécifique des outils

Cette approche est largement utilisée lorsque vous gérez votre propre groupe d’agents. Chaque agent a ses capabilities et chacun de vos projets a probablement besoin de ses propres conditions pour pouvoir fonctionner correctement.

Prenons un exemple; un projet doit compiler avec la version de XCode (l’IDE officiel iOS) 11.0 et un autre projet a besoin de la version 12.0. Vous devrez transmettre cette configuration à vos demands afin que Azure DevOps trouve les bons agents:

Dans le cas où vous souhaitez avoir la version 11.0 du logiciel, vous déclarerez vos demands comme ceci:

demands:
- XCODE_VERSION -equals 11.0

Et l’autre a besoin de la version 12.0 donc vous déclariez vos demands comme ci-dessous:

demands:
- XCODE_VERSION -equals 12.0

En supposant que XCODE_VERSION est une clé définie à l’avance dans les capabilities de l’agent qui renvoie la version du logiciel.

Maintenant, imaginez que nous ayons un pipeline comme celui-ci:

trigger: none

pool:
    name: Default
    demands:
    - XCODE_VERSION -equals 11.0

jobs:
- job:
  displayName: 'Job 1'
  steps:
  - task: Bash@3
    inputs:
      targetType: 'inline' 
      script: |
        echo "XCode version..."
        /usr/bin/xcodebuild -version

Si, pour une raison quelconque, vous devez créer votre projet avec une version différente de XCode, vous ne pourrez pas le faire sans mettre à jour votre modèle YAML, ce qui commencera probablement un processus de demande d’extraction pour examiner votre nouveau YAML et attendre les réviseurs.

Alors, comment éviter cela et garder votre pipeline flexible?

Définir des propriétés personnalisées

Azure DevOps a la possibilité de personnaliser le menu d’exécution; Par conséquent, nous allons spécifier au-dessus de notre template YAML un paramètre pour la version XCode appelé xcodeVersion et une valeur par défaut de 11.0

parameters:
- name: xcodeVersion
  displayName: 'XCode version'
  type: string
  default: '11.0'

Étant donné que les demands doivent être connues au début du pipeline, la déclaration de variables doit être utilisée pour les entrées de demands.

variables:
- name: xcodeVersionVariable
  value: '$'

Ainsi, le pipeline précédent ressemblera finalement à ceci:

trigger: none

parameters:
- name: xcodeVersion
  displayName: 'XCode version'
  type: string
  default: '11.0'

variables:
- name: xcodeVersionVariable
  value: '$'

pool:
    name: Default
    demands:
    - XCODE_VERSION -equals $(xcodeVersionVariable) # Demands selected dynamically

jobs:
- job:
  displayName: 'Job 1'
  steps:
  - task: Bash@3
    inputs:
      targetType: 'inline' 
      script: |
        echo "XCode version..."
        /usr/bin/xcodebuild -version

Le job sera exécuté sur un agent exécutant XCode 11.0 par défaut, et si vous voulez tester ce même job avec la version 12.0 ou la plus récente, c’est maintenant facile. Il vous suffit de taper la version souhaitée dans le menu d’exécution:

Run menu

Touche finale

En atteignant cette étape, vous avez la possibilité de modifier les demands selon vos besoins sans mettre à jour vos pipelines YAML. Cela garantit un pipeline flexible et des mises à jour progressives.

Happy coding!

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