- Azure
- Azure DevOps
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 :
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.
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.
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 :
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 !