Udostępnij za pośrednictwem


resources.webhooks.webhook — definicja elementu webhook

Zasób elementu webhook umożliwia integrację potoku z usługą zewnętrzną w celu zautomatyzowania przepływu pracy.

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.

Definicje odwołujące się do tej definicji: resources.webhooks

Właściwości

webhook Ciąg. Wymagane jako pierwsza właściwość.
Nazwa elementu webhook. Dopuszczalne wartości: [-_A-Za-z0-9]*.

connection Ciąg. Wymagane.
Nazwa połączenia. W przypadku elementu webhook w trybie offline będzie to typ przychodzącego elementu webhook. W przeciwnym razie będzie to typ rozszerzenia elementu webhook.

type Ciąg.
Nazwa rozszerzenia elementu webhook. Pozostaw to puste, jeśli jest to element webhook w trybie offline.

filtersresources.webhooks.webhook.filters.
Lista filtrów wyzwalacza.

Przykłady

Przykład podstawowy

Potok można zdefiniować w następujący sposób.

resources:
  webhooks:
    - webhook: WebHook
      connection: IncomingWH

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

Aby wyzwolić potok przy użyciu elementu webhook, musisz wysłać POST żądanie do .https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/<webhook_connection_name>?api-version=6.0-preview Ten punkt końcowy jest publicznie dostępny i nie jest wymagana autoryzacja. Żądanie powinno mieć następującą treść.

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

Podczas uzyskiwania dostępu do danych z treści żądania elementu webhook należy pamiętać, że może to prowadzić do nieprawidłowego kodu YAML. Jeśli na przykład w poprzednim potoku krok odczytuje element , a potok zostanie wyzwolany - script: echo ${{ parameters.WebHook.resource.message }}za pomocą elementu webhook, potok nie zostanie uruchomiony. Jest to spowodowane tym, że w procesie zastępowania ${{ parameters.WebHook.resource.message.title }} wartością message, która zawiera następujący kod JSON, wygenerowany kod YAML staje się nieprawidłowy.

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

Ponieważ wygenerowany kod YAML staje się nieprawidłowy, żadne uruchomienie potoku nie jest w kolejce w odpowiedzi.

Zapobieganie nieautoryzowanym przebiegom potoku

Elementy webhook umożliwiają każdemu wyzwalanie potoku, o ile znają nazwy organizacji i połączenia z usługą elementu webhook.

Możesz zapobiec nieautoryzowanym przebiegom potoku, definiując wpis tajny podczas tworzenia przychodzącego połączenia usługi elementu webhook. Należy również określić nazwę nagłówka HTTP, który zawiera sumę kontrolną SHA-1 treści elementu webhook.

Aby sprawdzić, czy przychodzące wywołanie interfejsu API REST elementu webhook jest autoryzowane, usługa Azure Pipelines oblicza sumę kontrolną SHA-1 treści żądania przy użyciu klucza tajnego jako klucza. Następnie porównuje ją z sumą kontrolną przekazaną w nagłówku żądania. W ten sposób rozmówcy udowadnia, że znają tajemnicę.

Spójrzmy na przykład. Załóżmy, że skonfigurowano przychodzące połączenie usługi elementu webhook o nazwie IncomingWH, określone wpis tajny to secret, i że suma kontrolna jest wysyłana w nagłówku HTTP o nazwie X-WH-Checksum. Załóżmy, że masz potok, który definiuje zasób elementu webhook.

Załóżmy, że chcesz wyzwolić potok przy użyciu następującej treści żądania:

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

W tym celu należy wysłać POST żądanie i https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/IncomingWH?api-version=6.0-preview dodać X-WH-Checksum nagłówek z wartością 750D33212D3AD4932CC390819050734831A0A94F. Nie trzeba określać żadnej nazwy użytkownika & hasła ani innych typów informacji uwierzytelniania.

Usługa Azure Pipelines będzie niezależnie obliczać sumę kontrolną SHA-1 treści przy użyciu klucza secret i będzie generować tę samą 750D33212D3AD4932CC390819050734831A0A94F wartość. Ponieważ wartości są zgodne, wywołanie jest autoryzowane, a kolejkowanie potoku następuje.

Wartość nagłówka X-WH-Checksum oblicza się w kodzie pseudokodowym jako SHA1(secret).ComputeHash(requestBody). Możesz użyć polecenia . Klasa net w System.Security.Cryptography.HMACSHA1 tym celu.

Aby zapobiec niepowodzeniu walidacji z powodu nowych wierszy lub białych znaków, zalecamy wysłanie treści w postaci zminimalizowanej. Oznacza to, wyślij

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

Zamiast

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

Mimo że dwa powyższe obiekty JSON reprezentują ten sam obiekt, generują różne sumy kontrolne SHA-1. Wynika to z tego, że algorytm SHA-1 jest obliczany na ich reprezentacji ciągu, która jest inna.

Zobacz też