Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med en webhook-resurs kan du integrera din pipeline med en extern tjänst för att automatisera arbetsflödet.
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.
Definitioner som refererar till den här definitionen: resources.webhooks
Egenskaper
webhook
sträng. Krävs som första egenskap.
Namnet på webhooken. Godtagbara värden: [-_A-Za-z0-9]*.
För Azure DevOps webhook webhook
måste alltid vara en WebHook
.
connection
sträng. Obligatoriskt.
Namnet på anslutningen. I händelse av offline webhook detta kommer att vara den typ av inkommande webhook annars kommer det att vara typen av webhook-tillägget.
type
sträng.
Namnet på webhookstillägget. Lämna detta tomt om det är en offline-webhook.
filters
resources.webhooks.webhook.filters.
Lista över utlösarfilter.
Exempel
Grundläggande exempel
Du kan definiera din pipeline enligt följande.
resources:
webhooks:
- webhook: WebHook
connection: IncomingWH
steps:
- script: echo ${{ parameters.WebHook.resource.message.title }}
Om du vill utlösa pipelinen med hjälp av webhooken måste du göra en POST
begäran till https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/<WebHook Name>?api-version=6.0-preview
.
WebHook-namnet måste matcha namnet på den inkommande WebHook-tjänstanslutningen.
Den här slutpunkten är offentligt tillgänglig och ingen auktorisering krävs. Begäran bör ha följande brödtext.
{
"resource": {
"message": {
"title": "Hello, world!",
"subtitle": "I'm using WebHooks!"
}
}
}
När du kommer åt data från webhookens begärandetext bör du tänka på att det kan leda till felaktig YAML. Om steget till exempel i den föregående pipelinen läser - script: echo ${{ parameters.WebHook.resource.message }}
och du utlöser pipelinen via en webhook, körs inte pipelinen. Detta beror på att den genererade YAML:en blir ogiltig när du ersätter ${{ parameters.WebHook.resource.message.title }}
med message
, som innehåller följande JSON.
{
"title": "Hello, world!",
"subtitle": "I'm using WebHooks!"
}
Eftersom den genererade YAML:n blir ogiltig placeras ingen pipelinekörning i kö som svar.
Förhindra obehöriga pipelinekörningar
Med webhooks kan vem som helst utlösa din pipeline, så länge de känner till namnen på din organisation och webhook-tjänstanslutningen.
Du kan förhindra obehöriga pipelinekörningar genom att definiera en hemlighet när du skapar en inkommande Webhook-tjänstanslutning. Du måste också ange namnet på HTTP-huvudet som innehåller SHA-1-kontrollsumman för webhookens brödtext.
För att verifiera att ett inkommande REST API-anrop för webhook har auktoriserats beräknar Azure Pipelines SHA-1-kontrollsumman för begärans brödtext med hjälp av hemligheten som nyckel. Den jämför den sedan med kontrollsumman som skickades i begärandehuvudet. På så sätt bevisar uppringaren att de känner till hemligheten.
Nu ska vi titta på ett exempel. Anta att du har konfigurerat en inkommande Webhook-tjänstanslutning med namnet IncomingWH
, angett att hemligheten är secret
och att kontrollsumman skickas i HTTP-huvudet med namnet X-WH-Checksum
. Anta att du har en pipeline som definierar en Webhook-resurs.
Anta att du vill utlösa pipelinen med hjälp av följande begärandetext:
{"resource":{"message":{"title":"Hello, world!","subtitle":"I'm using WebHooks!"}}}
För att göra detta måste du göra en POST
begäran till https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/IncomingWH?api-version=6.0-preview
och lägga till X-WH-Checksum
huvudet med värdet 750D33212D3AD4932CC390819050734831A0A94F
. Du behöver inte ange något användarnamn och lösenord eller någon annan typ av autentiseringsinformation.
Azure Pipelines beräknar oberoende SHA-1-kontrollsumman för brödtexten med hjälp secret
av som nyckel och genererar samma 750D33212D3AD4932CC390819050734831A0A94F
värde. Eftersom värdena matchar är anropet auktoriserat och pipelineköer fortsätter.
Du beräknar värdet för X-WH-Checksum
rubriken, i pseudokod, som SHA1(secret).ComputeHash(requestBody)
. Du kan använda . NET:s System.Security.Cryptography.HMACSHA1
klass för det här ändamålet.
För att förhindra valideringsfel på grund av nya rader eller blanksteg rekommenderar vi att du skickar brödtexten i ett minimerat formulär. Det vill: skicka
{"resource":{"message":{"title":"Hello, world!","subtitle":"I'm using WebHooks!"}}}
Istället för
{
"resource": {
"message": {
"title": "Hello, world!",
"subtitle": "I'm using WebHooks!"
}
}
}
Även om de två JSON-objekten ovan representerar samma objekt genererar de olika SHA-1-kontrollsummor. Detta beror på att SHA-1 beräknas på deras strängrepresentation, vilket är annorlunda.