Dela via


resources.webhooks.webhook-definition

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. Acceptabla värden: [-_A-Za-z0-9]*.

connection Sträng. Krävs.
Namnet på anslutningen. Vid offline-webhook är det här typen av inkommande webhook, annars är det typen av webhook-tillägg.

type Sträng.
Namnet på webhook-tillägget. Lämna detta tomt om det är en offline-webhook.

filtersresources.webhooks.webhook.filters.
Lista över utlösarfilter.

Exempel

Grundläggande exempel

Du kan definiera din pipeline på följande sätt.

resources:
  webhooks:
    - webhook: WebHook
      connection: IncomingWH

steps:  
- script: echo ${{ parameters.WebHook.resource.message.title }}

Om du vill utlösa din pipeline 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_connection_name>?api-version=6.0-preview. 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 vara medveten om att det kan leda till felaktig YAML. Om ditt steg till exempel i föregående pipeline läser - script: echo ${{ parameters.WebHook.resource.message }}och utlöser pipelinen via en webhook, körs inte pipelinen. Detta beror på att ${{ parameters.WebHook.resource.message.title }} den genererade YAML:en blir ogiltig när du ersätter med message, som innehåller följande JSON.

{
  "title": "Hello, world!",
  "subtitle": "I'm using WebHooks!"
}

Eftersom den genererade YAML:n blir ogiltig köas ingen pipelinekörning 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 webhooks 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.

Låt oss ta en titt på ett exempel. Anta att du har konfigurerat en inkommande Webhook-tjänstanslutning med namnet IncomingWH, angett att hemligheten är secretoch 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 & 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 auktoriseras anropet 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-klass System.Security.Cryptography.HMACSHA1 för detta ändamål.

För att förhindra valideringsfel på grund av nya rader eller blanksteg rekommenderar vi att du skickar brödtexten i ett minimerat format. 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.

Se även