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


Определение 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]*. Для веб-перехватчика 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 заголовок со значением 750D33212D3AD4932CC390819050734831A0A94Fhttps://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 вычисляется в строковом представлении, которое отличается.

См. также