Photo par Josh Redd

Modifiez et réutilisez facilement vos tasks groups avec Azure DevOps

Partagez vos task groups!

Créé par Damien Aicheh le 28/05/2022 · 5 mins

Lorsque vous créez un nouveau pipeline de Releases à l’aide de l’interface classique (sans YAML), vous devez tout configurer manuellement dans l’interface d’Azure DevOps.

Pour pouvoir réutiliser plusieurs fois vos scripts et vos tâches, vous devez utiliser des groupes de tâches. Pour rappel, voici un exemple :

Task groups

Pour le versionner ou le partager dans vos différents projets, vous devez l’exporter au format JSON en cliquant sur le bouton Export comme vous pouvez le voir ci-dessus.

Sur la base de l’exemple ci-dessus, vous allez télécharger un fichier JSON nommé comme votre task group:

{
    "tasks": [
        {
            "environment": {},
            "displayName": "terraform init",
            "alwaysRun": false,
            "continueOnError": false,
            "condition": "succeeded()",
            "enabled": true,
            "timeoutInMinutes": 0,
            "retryCountOnTaskFailure": 0,
            "inputs": {
                "targetType": "inline",
                "filePath": "",
                "arguments": "",
                "script": "terraform init \\\n-input=false \\\n-backend-config=\"resource_group_name=$(RESOURCE_GROUP)\" \\\n-backend-config=\"storage_account_name=$(TF_STORAGE_ACCOUNT)\" \\\n-backend-config=\"container_name=tfstate\" \\\n-backend-config=\"key=backend.$(ENV_NAME).terraform.tfstate\" \\\n-reconfigure",
                "workingDirectory": "",
                "failOnStderr": "false",
                "bashEnvValue": ""
            },
            "task": {
                "id": "6c731c3c-3c68-459a-a5c9-bde6e6595b5b",
                "versionSpec": "3.*",
                "definitionType": "task"
            }
        }, 
        // The other lines of the file are voluntary omitted for clarity
    ], 
}

Comme vous le remarquerez, le problème avec cette export est la lisibilité des scripts. Si vous voulez le mettre dans un gestionnaire de code source comme Git et ajouter une gestion des pull requests avec votre équipe, ce sera compliquer à modifier sans Azure DevOps.

YAML à la rescousse

Pour vous aider à le faire, vous pouvez utiliser un outil simple appelé yq. Cela vous aidera à convertir votre fichier JSON en un fichier YAML lisible.

En exécutant cette simple commande sur votre fichier :

yq -P . YOUR_TASK_GROUP_FILE.json > YOUR_TASK_GROUP_FILE.yaml

Vous vous retrouverez avec un script yaml lisible et modifiable :

- environment: {}
    displayName: terraform init
    alwaysRun: false
    continueOnError: false
    condition: succeeded()
    enabled: true
    timeoutInMinutes: 0
    retryCountOnTaskFailure: 0
    inputs:
      targetType: inline
      filePath: ""
      arguments: ""
      script: |-
        terraform init \
        -input=false \
        -backend-config="resource_group_name=$(RESOURCE_GROUP)" \
        -backend-config="storage_account_name=$(TF_STORAGE_ACCOUNT)" \
        -backend-config="container_name=tfstate" \
        -backend-config="key=backend.$(ENV_NAME).terraform.tfstate" \
        -reconfigure
      workingDirectory: ""
      failOnStderr: "false"
      bashEnvValue: ""
    task:
      id: 6c731c3c-3c68-459a-a5c9-bde6e6595b5b
      versionSpec: 3.*
      definitionType: task
    # The other lines of the file are voluntary omitted for clarity

La partie script s’affiche exactement comme dans Azure DevOps et en prime le fichier exporté est plus court : on passe de 240 à 180 lignes dans cet exemple.

Réimportez vos task groups

Lorsque vous devez réimporter votre task group dans Azure DevOps, il vous suffit d’exécuter la commande ci-dessous pour générer le fichier JSON à partir du YAML :

yq -o=json '.' YOUR_TASK_GROUP_FILE.yaml > YOUR_TASK_GROUP_FILE.json

Ensuite, vous pouvez l’importer :

Import Task groups

Touche finale

Avec cette méthode, vous pourrez gagner du temps en réutilisant vos Tasks groups et en les versionnant. Il sera également plus facile de les lire et de les maintenir en dehors d’Azure DevOps.

Happy coding !

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