Utiliser en toute sécurité des variables et des paramètres dans votre pipeline
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Découvrez comment utiliser en toute sécurité des variables et des paramètres pour collecter les entrées des utilisateurs du pipeline. Pour plus d’informations, consultez les articles suivants :
- Définir des variables
- Définir des variables de secret
- Utiliser des variables prédéfinies
- Utiliser des paramètres de runtime
- Utiliser des types de modèles
Soyez prudent avec les variables secrètes. Les méthodes recommandées pour définir des variables secrètes incluent l’utilisation de l’interface utilisateur, la création d’un groupe de variables ou l’utilisation d’un groupe de variables source à partir d’Azure Key Vault. Pour en savoir plus, consultez Définir des variables secrètes.
Variables
Les variables servent de méthode pratique pour collecter les entrées utilisateur en amont et faciliter le transfert de données entre les étapes du pipeline. Toutefois, faites preuve de prudence lors de l’utilisation de variables. Par défaut, les variables nouvellement créées, définies dans YAML ou scriptées, sont en lecture-écriture. Les étapes en aval peuvent modifier de manière inattendue les valeurs des variables.
Par exemple, considérez l’extrait de code de script suivant :
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
Si une étape précédente est en cours MyConfig
Debug & deltree /y c:
, cela peut entraîner des conséquences inattendues. Bien que cet exemple supprime simplement le contenu de votre agent de build, il met en évidence le danger potentiel de ces paramètres.
Vous pouvez définir les variables en lecture seule.
Les variables système comme Build.SourcesDirectory
, les variables de sortie de tâche et les variables de file d’attente sont toujours en lecture seule.
Les variables créées en YAML ou créées au moment de l’exécution par un script peuvent être définies en lecture seule.
Quand un script ou une tâche crée une variable, ils peuvent passer l’indicateur isReadonly=true
dans leur commande de journalisation pour que la variable soit en lecture seule.
Dans YAML, vous pouvez spécifier des variables en lecture seule à l’aide de la clé spécifique suivante :
variables:
- name: myReadOnlyVar
value: myValue
readonly: true
Variables de file d’attente
Lors de la définition d’une variable dans l’éditeur d’interface utilisateur pipelines, vous pouvez autoriser les utilisateurs à remplacer sa valeur pendant l’exécution du pipeline. Ces variables sont appelées variables de temps d’attente et sont toujours définies dans l’éditeur d’interface utilisateur pipelines.
Les variables de file d’attente sont exposées à l’utilisateur final quand il exécute manuellement un pipeline, et il peut changer leurs valeurs.
Les utilisateurs ont besoin de l’autorisation Modifier la configuration de build en file d’attente sur le pipeline pour spécifier des variables définies au moment de la mise en file d’attente.
Limiter les variables qui peuvent être définies au moment de la mise en file d’attente
L’interface utilisateur et l’API REST utilisées pour exécuter un pipeline permettent aux utilisateurs de définir de nouvelles variables au moment de la mise en file d’attente.
Au début d’Azure Pipelines, cette fonctionnalité a rencontré les problèmes suivants :
- Il permet aux utilisateurs de définir de nouvelles variables qui ne sont pas déjà définies par l’auteur du pipeline dans la définition.
- Elle permettait aux utilisateurs de remplacer les variables système.
Pour résoudre ces problèmes, nous avons défini un paramètre pour limiter les variables qui peuvent être définies au moment de la file d’attente. Avec ce paramètre activé, seules ces variables explicitement marquées comme « Settable au moment de la file d’attente » peuvent être définies. En d’autres termes, vous pouvez définir toutes les variables au moment de la file d’attente, sauf si ce paramètre est activé.
Le paramètre est conçu pour fonctionner au niveau de l’organisation et du projet.
- Niveau de l’organisation :
- Lorsque le paramètre est activé, il applique que seules les variables explicitement marquées comme « Settable au moment de la file d’attente » peuvent être modifiées pour tous les pipelines de tous les projets au sein de l’organisation.
- Les administrateurs de collection de projets peuvent activer ou désactiver ce paramètre.
- Accédez à ce paramètre sous Paramètres des pipelines des paramètres>de>l’organisation.
- Niveau du projet :
- Comme au niveau de l’organisation, l’activation de ce paramètre garantit que seules les variables marquées comme « Settable au moment de la file d’attente » peuvent être modifiées pour tous les pipelines au sein du projet spécifique.
- Si le paramètre au niveau de l’organisation est activé, il s’applique à tous les projets et ne peut pas être désactivé.
- Les administrateurs de projet peuvent activer ou désactiver ce paramètre.
- Accédez à ce paramètre sous Paramètres de pipelines>des paramètres>de projet.
L’exemple suivant montre que le paramètre est activé et que votre pipeline définit une variable nommée my_variable
qui n’est pas définie au moment de la file d’attente.
Ensuite, supposons que vous voulez exécuter le pipeline. Le panneau Variables n’affiche aucune variable, et le bouton Ajouter une variable est manquant.
L’utilisation des builds - File d’attente et exécutions - Exécuter des appels d’API REST de pipeline pour mettre en file d’attente une exécution de pipeline et définir la valeur d’une my_variable
nouvelle variable échoue avec une erreur similaire à ce qui suit.
{
"$id": "1",
"innerException": null,
"message": "You can't set the following variables (my_variable). If you want to be able to set these variables, then edit the pipeline and select Settable at queue time on the variables tab of the pipeline editor.",
"typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
"typeKey": "PipelineValidationException",
"errorCode": 0,
"eventId": 3000
}
Paramètres
Contrairement aux variables, un pipeline en cours d’exécution ne peut pas modifier les paramètres du pipeline.
Les paramètres ont des types de données tels que number
et string
, et ils peuvent être limités à des sous-ensembles de valeurs spécifiques. Cette restriction est utile lorsqu’un aspect configurable par l’utilisateur du pipeline ne doit accepter que les valeurs d’une liste prédéfinie, ce qui garantit que le pipeline n’accepte pas de données arbitraires.
Activer la validation des paramètres relatives aux arguments des tâches shell
Les pipelines peuvent référencer des tâches exécutées dans le pipeline. Certaines tâches incluent un arguments
paramètre qui vous permet de spécifier d’autres options pour la tâche.
Lorsque le paramètre Activer la validation des arguments des tâches de l’interpréteur de commandes est activé, le paramètre arguments fait l’objet d’une révision pour s’assurer que l’interpréteur de commandes exécute correctement des caractères tels que des points-virgules, des guillemets et des parenthèses. Comme pour les variables de limite qui peuvent être définies au moment de la file d’attente, vous pouvez configurer la validation des paramètres Activer les arguments des tâches shell au niveau de l’organisation ou du projet sous Paramètres> des paramètres des pipelines.>
Lorsque cette fonctionnalité est activée, tous les problèmes de validation liés au arguments
paramètre déclenchent un message d’erreur comme celui-ci :
Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).
Pour résoudre ce problème, ajustez les arguments en échappant des caractères spéciaux, comme indiqué dans le message d’erreur. Cette validation s’applique au arguments
paramètre dans les tâches spécifiques suivantes :
- PowerShell
- BatchScript
- Bash
- Ssh
- AzureFileCopy
- WindowsMachineFileCopy
Étapes suivantes
Sécuriser votre infrastructure partagée