Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ресурс веб-перехватчика позволяет интегрировать конвейер с внешней службой для автоматизации рабочего процесса.
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]*.
Для веб-перехватчика webhook
Azure DevOps всегда должен быть WebHook
.
строка 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 Name>?api-version=6.0-preview
.
Имя веб-перехватчика должно соответствовать имени входящего подключения службы веб-перехватчика.
Эта конечная точка общедоступна и авторизация не требуется. Запрос должен иметь следующий текст.
{
"resource": {
"message": {
"title": "Hello, world!",
"subtitle": "I'm using WebHooks!"
}
}
}
При доступе к данным из текста запроса веб-перехватчика учитывайте, что это может привести к неправильному YAML. Например, если в предыдущем конвейере шаг считывается - script: echo ${{ parameters.WebHook.resource.message }}
, и вы активируете конвейер через веб-перехватчик, конвейер не запускается. Это связано с тем, что в процессе замены ${{ parameters.WebHook.resource.message.title }}
message
на ,который содержит следующий 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
запрос и добавить X-WH-Checksum
заголовок со значением 750D33212D3AD4932CC390819050734831A0A94F
https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/IncomingWH?api-version=6.0-preview
. Вам не нужно указывать имя пользователя и пароль или другие типы сведений о проверке подлинности.
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 вычисляется в строковом представлении, которое отличается.