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.
filters
resources.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.