Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Une ressource webhook vous permet d’intégrer votre pipeline à un service externe pour automatiser le flux de travail.
webhooks:
- webhook: string # Required as first property. Name of the webhook.
connection: string # Required. Name of the connection. In case of offline webhook this will be the type of Incoming Webhook otherwise it will be the type of the webhook extension.
type: string # Name of the webhook extension. Leave this empty if it is an offline webhook.
filters: [ filter ] # List of trigger filters.
Définitions qui font référence à cette définition : resources.webhooks
Propriétés
chaîne webhook
. Obligatoire en tant que première propriété.
Nom du webhook. Valeurs acceptables : [-_A-Za-z0-9]*.
Pour le webhook Azure DevOps, webhook
doit toujours être un WebHook
.
chaîne connection
. Obligatoire.
Nom de la connexion. En cas de webhook hors connexion, il s’agit du type de Webhook entrant sinon il s’agit du type de l’extension webhook.
chaîne type
.
Nom de l’extension webhook. Laissez cette valeur vide s’il s’agit d’un webhook hors connexion.
filters
resources.webhooks.webhook.filters.
Liste des filtres de déclencheur.
Exemples
Exemple de base
Vous pouvez définir votre pipeline comme suit.
resources:
webhooks:
- webhook: WebHook
connection: IncomingWH
steps:
- script: echo ${{ parameters.WebHook.resource.message.title }}
Pour déclencher votre pipeline à l’aide du webhook, vous devez effectuer une POST
demande .https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/<WebHook Name>?api-version=6.0-preview
Le nom du WebHook doit correspondre à celui de la connexion du service WebHook entrant.
Ce point de terminaison est disponible publiquement et aucune autorisation n’est nécessaire. La requête doit avoir le corps suivant.
{
"resource": {
"message": {
"title": "Hello, world!",
"subtitle": "I'm using WebHooks!"
}
}
}
Lorsque vous accédez aux données à partir du corps de la requête du webhook, n’oubliez pas qu’il peut entraîner une erreur YAML. Par exemple, si, dans le pipeline précédent, votre étape lit - script: echo ${{ parameters.WebHook.resource.message }}
et que vous déclenchez le pipeline via un webhook, le pipeline ne s’exécute pas. Cela est dû au fait que dans le processus de remplacement ${{ parameters.WebHook.resource.message.title }}
par message
, qui contient le code JSON suivant, le YAML généré devient non valide.
{
"title": "Hello, world!",
"subtitle": "I'm using WebHooks!"
}
Étant donné que le YAML généré n’est plus valide, aucune exécution de pipeline n’est mise en file d’attente en réponse.
Empêcher les exécutions de pipeline non autorisées
Les webhooks permettent à toute personne de déclencher votre pipeline, tant qu’elles connaissent les noms de votre organisation et de votre connexion de service webhook.
Vous pouvez empêcher les exécutions de pipeline non autorisées en définissant un secret lors de la création d’une connexion de service webhook entrante. Vous devez également spécifier le nom de l’en-tête HTTP qui contient la somme de contrôle SHA-1 du corps du webhook.
Pour vérifier qu’un appel d’API REST webhook entrant est autorisé, Azure Pipelines calcule la somme de contrôle SHA-1 du corps de la requête à l’aide du secret en tant que clé. Il le compare ensuite à la somme de contrôle passée dans l’en-tête de requête. Ainsi, l’appelant prouve qu’il connaît le secret.
Prenons un exemple. Supposons que vous avez configuré une connexion de service Webhook entrante nommée IncomingWH
, spécifiée le secret est secret
, et que la somme de contrôle est envoyée dans l’en-tête HTTP nommé X-WH-Checksum
. Imaginez que vous disposez d’un pipeline qui définit une ressource Webhook.
Supposons que vous souhaitez déclencher le pipeline à l’aide du corps de la requête suivant :
{"resource":{"message":{"title":"Hello, world!","subtitle":"I'm using WebHooks!"}}}
Pour ce faire, vous devez effectuer une POST
demande et https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/IncomingWH?api-version=6.0-preview
ajouter l’en-tête X-WH-Checksum
avec la valeur .750D33212D3AD4932CC390819050734831A0A94F
Vous n’avez pas besoin de spécifier de nom d’utilisateur et de mot de passe ou tout autre type d’informations d’authentification.
Azure Pipelines calcule indépendamment la somme de contrôle SHA-1 du corps à l’aide secret
de la clé et génère la même 750D33212D3AD4932CC390819050734831A0A94F
valeur. Étant donné que les valeurs correspondent, l’appel est autorisé et la file d’attente du pipeline se poursuit.
Vous calculez la valeur de l’en-tête X-WH-Checksum
, en pseudocode, en tant que SHA1(secret).ComputeHash(requestBody)
. Vous pouvez utiliser . Classe NET System.Security.Cryptography.HMACSHA1
à cet effet.
Pour éviter les échecs de validation en raison de nouvelles lignes ou espaces blancs, nous vous recommandons d’envoyer le corps sous forme réduite. Autrement dit, envoyer
{"resource":{"message":{"title":"Hello, world!","subtitle":"I'm using WebHooks!"}}}
Au lieu de
{
"resource": {
"message": {
"title": "Hello, world!",
"subtitle": "I'm using WebHooks!"
}
}
}
Même si les deux objets JSON ci-dessus représentent le même objet, ils génèrent des sommes de contrôle SHA-1 différentes. Cela est dû au fait que SHA-1 est calculé sur leur représentation sous forme de chaîne, qui est différente.