Exercice - Ajouter des phases de linting et de validation à votre pipeline
Vous avez parlé avec votre équipe et vous avez décidé d’automatiser davantage vos déploiements en utilisant un pipeline. Vous voulez renforcer la confiance dans ce que vous déployez.
Dans cet exercice, vous allez ajouter des phases de validation à votre pipeline. Vous exécuterez ensuite le linter et la validation préalable avant chaque déploiement.
Pendant ce processus, vous allez :
- Mettre à jour votre pipeline existant en ajoutant deux nouvelles phases pour effectuer une vérification lint et valider votre code Bicep.
- Exécuter votre pipeline.
- Corrigez tous les problèmes détectés par votre pipeline.
Mettre à jour votre pipeline pour le préparer aux phases
Tout d’abord, vous devez mettre à jour votre fichier de pipeline pour définir une phase. Azure Pipelines crée automatiquement une phase pour vous, mais comme que vous allez bientôt ajouter des phases supplémentaires, vous devez mettre à jour votre pipeline pour définir explicitement des phases.
Dans Visual Studio Code, ouvrez le fichier azure-pipelines.yml dans le dossier deploy.
Supprimez tout ce qui se trouve dans le fichier depuis la ligne 14 jusqu’au bas du fichier. Veillez également à supprimer la ligne
jobs:
.En bas du fichier, ajoutez le code suivant :
stages: - stage: Deploy jobs: - job: Deploy steps: - task: AzureResourceManagerTemplateDeployment@3 name: Deploy displayName: Deploy to Azure inputs: connectedServiceName: $(ServiceConnectionName) deploymentName: $(Build.BuildNumber) location: $(DeploymentDefaultLocation) resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType)
Conseil
Les fichiers YAML sont sensibles à l’indentation. Si vous tapez ou que vous collez ce code, veillez à ce que l’indentation soit correcte. Dans la section suivante, vous examinerez la définition complète du pipeline YAML pour vérifier que votre fichier y correspond.
Ajouter les phases de vérification lint et de validation à votre pipeline
En dessous de la ligne
stages:
, ajoutez une phase lint :- stage: Lint jobs: - job: LintCode displayName: Lint code steps: - script: | az bicep build --file deploy/main.bicep name: LintBicepCode displayName: Run Bicep linter
Cette phase définit une seule étape, qui exécute la commande
az bicep build
pour effectuer le linting du fichier Bicep.En dessous des lignes que vous venez d’ajouter, ajoutez une phase de validation :
- stage: Validate jobs: - job: ValidateBicepCode displayName: Validate Bicep code steps: - task: AzureResourceManagerTemplateDeployment@3 name: RunPreflightValidation displayName: Run preflight validation inputs: connectedServiceName: $(ServiceConnectionName) location: $(deploymentDefaultLocation) deploymentMode: Validation resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType)
Cette phase définit une seule étape, qui exécute la validation préalable. Notez que cette étape inclut une référence à votre connexion de service, car le processus de validation préalable nécessite une communication avec Azure.
La définition de votre pipeline comporte maintenant trois phases. La première exécute le linter sur votre fichier Bicep, la deuxième effectue une validation préliminaire et la troisième effectue le déploiement sur Azure.
Enregistrez le fichier .
Configurer le linter
Par défaut, le linter Bicep émet un avertissement quand il détecte un problème dans votre fichier. Azure Pipelines ne traite pas les avertissements du linter comme des problèmes devant entraîner l’arrêt de votre pipeline. Pour personnaliser ce comportement, vous créez un fichier bicepconfig.json qui reconfigure le linter.
Ajoutez le nouveau fichier dans le dossier deploy et nommez-le bicepconfig.json.
Copiez le code suivant dans le fichier :
{ "analyzers": { "core": { "enabled": true, "verbose": true, "rules": { "adminusername-should-not-be-literal": { "level": "error" }, "max-outputs": { "level": "error" }, "max-params": { "level": "error" }, "max-resources": { "level": "error" }, "max-variables": { "level": "error" }, "no-hardcoded-env-urls": { "level": "error" }, "no-unnecessary-dependson": { "level": "error" }, "no-unused-params": { "level": "error" }, "no-unused-vars": { "level": "error" }, "outputs-should-not-contain-secrets": { "level": "error" }, "prefer-interpolation": { "level": "error" }, "secure-parameter-default": { "level": "error" }, "simplify-interpolation": { "level": "error" }, "protect-commandtoexecute-secrets": { "level": "error" }, "use-stable-vm-image": { "level": "error" } } } } }
Enregistrez le fichier .
Vérifier et commiter votre définition de pipeline
Vérifiez que votre fichier azure-pipelines.yml se présente comme le fichier suivant :
trigger: batch: true branches: include: - main pool: vmImage: ubuntu-latest variables: - name: deploymentDefaultLocation value: westus3 stages: - stage: Lint jobs: - job: LintCode displayName: Lint code steps: - script: | az bicep build --file deploy/main.bicep name: LintBicepCode displayName: Run Bicep linter - stage: Validate jobs: - job: ValidateBicepCode displayName: Validate Bicep code steps: - task: AzureResourceManagerTemplateDeployment@3 name: RunPreflightValidation displayName: Run preflight validation inputs: connectedServiceName: $(ServiceConnectionName) location: $(deploymentDefaultLocation) deploymentMode: Validation resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType) - stage: Deploy jobs: - job: Deploy steps: - task: AzureResourceManagerTemplateDeployment@3 name: Deploy displayName: Deploy to Azure inputs: connectedServiceName: $(ServiceConnectionName) deploymentName: $(Build.BuildNumber) location: $(DeploymentDefaultLocation) resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType)
Si ce n’est pas le cas, modifiez-le d’après cet exemple, puis enregistrez-le.
Commitez et poussez (push) vos modifications à votre dépôt Git en exécutant les commandes suivantes dans le terminal Visual Studio Code :
git add . git commit -m "Add lint and validation stages" git push
Immédiatement après votre envoi, Azure Pipelines démarre une nouvelle exécution du pipeline.
Visualiser l’exécution du pipeline
Dans votre navigateur, accédez à Pipelines.
Sélectionnez l’exécution la plus récente de votre pipeline.
Si le pipeline est toujours en cours d’exécution, attendez qu’il soit terminé. Azure Pipelines met automatiquement à jour la page avec l’état le plus récent, mais il est toutefois conseillé d’actualiser régulièrement cette page.
Notez que l’exécution du pipeline montre maintenant les trois phases que vous avez définies dans le fichier YAML. Notez aussi que la phase Vérification lint a échoué.
Sélectionnez la phase Vérification lint pour voir ses détails.
Sélectionnez l’étape Exécuter le linter Bicep pour voir le journal du pipeline.
Notez que le message d’erreur affiché est similaire au suivant :
Erreur no-unused-params : Le paramètre « storageAccountNameParam » est déclaré mais jamais utilisé.
Cette erreur indique que le linter a détecté une violation de règle dans votre fichier Bicep.
Corriger l’erreur du linter
Maintenant que vous avez identifié le problème, vous pouvez le résoudre dans votre fichier Bicep.
Dans Visual Studio Code, ouvrez le fichier main.bicep dans le dossier deploy.
Notez que le linter Bicep a également détecté que le paramètre
storageAccountNameParam
n’est pas utilisé. Visual Studio Code indique le paramètre inutilisé avec une ligne ondulée. Normalement, la ligne devrait être en jaune pour indiquer un avertissement. Comme vous avez personnalisé le fichier bicepconfig.json, le linter traite le code comme une erreur et affiche la ligne en rouge.param storageAccountNameParam string = uniqueString(resourceGroup().id)
Supprimez le paramètre
storageAccountNameParam
.Enregistrez le fichier .
Commitez et poussez (push) vos modifications à votre dépôt Git en exécutant les commandes suivantes dans le terminal Visual Studio Code :
git add . git commit -m "Remove unused parameter" git push
Là encore, Azure Pipelines déclenche automatiquement une nouvelle exécution de votre pipeline.
Revisualiser l’exécution du pipeline
Dans votre navigateur, accédez à votre pipeline.
Sélectionnez la dernière exécution.
Attendez la fin de l’exécution du pipeline. Azure Pipelines met automatiquement à jour la page avec l’état le plus récent, mais il est toutefois conseillé d’actualiser régulièrement cette page.
Notez que la phase Lint s’est terminée correctement, mais que la phase Validate a échoué.
Sélectionnez la phase Validation pour voir ses détails.
Sélectionnez l’étape Exécuter la validation préliminaire pour voir le journal du pipeline.
Notez que l’erreur indiquée dans le journal contient le message suivant :
mystorageresourceNameSuffix n’est pas un nom de compte de stockage valide. Un nom de compte de stockage doit être compris entre 3 et 24 caractères composés uniquement de chiffres et de lettres en minuscules.
Cette erreur indique que le nom du compte de stockage n’est pas valide.
Corriger l’erreur de validation
Vous avez trouvé un autre problème dans le fichier Bicep. Ici, vous allez corriger le problème.
Dans Visual Studio Code, ouvrez le fichier main.bicep dans le dossier deploy.
Examinez la définition de la variable
storageAccountName
:var appServiceAppName = 'toy-website-${resourceNameSuffix}' var appServicePlanName = 'toy-website' var applicationInsightsName = 'toywebsite' var logAnalyticsWorkspaceName = 'workspace-${resourceNameSuffix}' var storageAccountName = 'mystorageresourceNameSuffix'
Il semble y avoir une faute de frappe, et l’interpolation de chaîne n’a pas été configurée correctement.
Mettez à jour la variable
storageAccountName
de façon à utiliser correctement l’interpolation de chaîne :var storageAccountName = 'mystorage${resourceNameSuffix}'
Enregistrez le fichier .
Commitez et poussez (push) vos modifications à votre dépôt Git en exécutant les commandes suivantes dans le terminal Visual Studio Code :
git add . git commit -m "Fix string interpolation" git push
Visualiser l’exécution réussie du pipeline
Dans votre navigateur, accédez à votre pipeline.
Sélectionnez la dernière exécution.
Attendez la fin de l’exécution du pipeline. Azure Pipelines met automatiquement à jour la page avec l’état le plus récent, mais il est toutefois conseillé d’actualiser régulièrement cette page.
Notez que les trois phases du pipeline se sont terminées avec succès :
Vous avez maintenant un pipeline qui détecte correctement les erreurs dans votre code Bicep tôt dans votre processus de déploiement, puis qui déploie sur Azure s’il n’y a pas d’erreurs.