Определение resources.webhooks.webhook
Ресурс веб-перехватчика позволяет интегрировать конвейер с внешней службой для автоматизации рабочего процесса.
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.
Определения, ссылающиеся на это определение: resources.webhooks
Свойства
webhook
Строка. Требуется в качестве первого свойства.
Имя веб-перехватчика. Допустимые значения: [-_A-Za-z0-9]*.
connection
Строка. Обязательный.
Имя подключения. В случае автономного веб-перехватчика это будет тип входящего веб-перехватчика, в противном случае это будет тип расширения веб-перехватчика.
type
Строка.
Имя расширения веб-перехватчика. Оставьте его пустым, если это автономный веб-перехватчик.
filters
resources.webhooks.webhook.filters.
Список фильтров триггеров.
Примеры
Простой пример
Вы можете определить конвейер следующим образом.
resources:
webhooks:
- webhook: WebHook
connection: IncomingWH
steps:
- script: echo ${{ parameters.WebHook.resource.message.title }}
Чтобы запустить конвейер с помощью веб-перехватчика, необходимо выполнить POST
запрос к https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/<webhook_connection_name>?api-version=6.0-preview
. Эта конечная точка является общедоступной, и авторизация не требуется. Запрос должен иметь следующий текст.
{
"resource": {
"message": {
"title": "Hello, world!",
"subtitle": "I'm using WebHooks!"
}
}
}
При доступе к данным из текста запроса веб-перехватчика следует помнить, что это может привести к неправильному YAML. Например, если в предыдущем конвейере шаг считывает - script: echo ${{ parameters.WebHook.resource.message }}
и запускается конвейер через веб-перехватчик, конвейер не запускается. Это связано с message
тем, что в процессе замены ${{ parameters.WebHook.resource.message.title }}
на , который содержит следующий JSON, созданный YAML становится недопустимым.
{
"title": "Hello, world!",
"subtitle": "I'm using WebHooks!"
}
Так как созданный YAML становится недопустимым, выполнение конвейера не помещается в очередь в ответ.
Предотвращение несанкционированных запусков конвейера
Веб-перехватчики позволяют любому пользователю активировать ваш конвейер, если он знает имена вашей организации и подключение к службе веб-перехватчиков.
Вы можете предотвратить несанкционированные запуски конвейера, определив секрет при создании подключения к службе входящего веб-перехватчика. Необходимо также указать имя заголовка HTTP, содержащего контрольную сумму SHA-1 тела веб-перехватчика.
Чтобы убедиться, что входящий вызов REST API веб-перехватчика авторизован, Azure Pipelines вычисляет контрольную сумму SHA-1 текста запроса, используя секрет в качестве ключа. Затем она сравнивается с контрольной суммой, переданной в заголовке запроса. Таким образом, вызывающий подтверждает, что он знает секрет.
Давайте рассмотрим пример. Предположим, вы настроили подключение к службе входящего веб-перехватчика с именем IncomingWH
, указали секрет secret
и что контрольная сумма отправляется в заголовке HTTP с именем X-WH-Checksum
. Представьте, что у вас есть конвейер, определяющий ресурс веб-перехватчика.
Предположим, вы хотите активировать конвейер с помощью следующего текста запроса:
{"resource":{"message":{"title":"Hello, world!","subtitle":"I'm using WebHooks!"}}}
Для этого необходимо выполнить POST
запрос к https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/IncomingWH?api-version=6.0-preview
и добавить заголовок X-WH-Checksum
со значением 750D33212D3AD4932CC390819050734831A0A94F
. Вам не нужно указывать имя пользователя & пароль или другие сведения о проверке подлинности.
Azure Pipelines будет независимо вычислять контрольную сумму SHA-1 текста, используя secret
в качестве ключа, и создаст то же 750D33212D3AD4932CC390819050734831A0A94F
значение. Так как значения совпадают, вызов авторизован, и очередь конвейера продолжается.
Значение заголовка в псевдокоде X-WH-Checksum
вычисляется как SHA1(secret).ComputeHash(requestBody)
. Можно использовать . Для этой цели используется System.Security.Cryptography.HMACSHA1
класс NET.
Чтобы предотвратить сбои проверки из-за новых строк или пробелов, рекомендуется отправить текст в свернутом виде. То есть отправить
{"resource":{"message":{"title":"Hello, world!","subtitle":"I'm using WebHooks!"}}}
вместо
{
"resource": {
"message": {
"title": "Hello, world!",
"subtitle": "I'm using WebHooks!"
}
}
}
Несмотря на то, что два указанных выше объекта JSON представляют один и тот же объект, они создают разные контрольные суммы SHA-1. Это связано с тем, что SHA-1 вычисляется по строковому представлению, которое отличается.