Поделиться через


Определение 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 Строка.
Имя расширения веб-перехватчика. Оставьте его пустым, если это автономный веб-перехватчик.

filtersresources.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 вычисляется по строковому представлению, которое отличается.

См. также раздел