resources.webhooks.webhook 定義

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.webhook

屬性

webhook 字串。 作為第一個屬性的必要專案。
Webhook 的名稱。 可接受的值:[-_A-Za-z0-9]*。

connection 字串。 必要。
連接的名稱。 如果是離線 Webhook,這會是傳入 Webhook 的類型,否則會是 Webhook 延伸模組的類型。

type 字串。
Webhook 擴充功能的名稱。 如果是離線 Webhook,請將此保留空白。

filtersresources.webhooks.webhook.filters
觸發程式篩選清單。

範例

基本範例

您可以定義管線,如下所示。

resources:
  webhooks:
    - webhook: WebHook
      connection: IncomingWH

steps:  
- script: echo ${{ parameters.WebHook.resource.message.title }}

若要使用 Webhook 觸發管線,您必須向 提出 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!"
        }
    }
}

當您從 Webhook 的要求本文存取資料時,請注意它可能會導致不正確的 YAML。 例如,如果在上一個管線中,您的步驟會讀取 - script: echo ${{ parameters.WebHook.resource.message }},而您透過 Webhook 觸發管線,則管線不會執行。 這是因為在以 message取代 ${{ parameters.WebHook.resource.message.title }} 的過程中,其中包含下列 JSON,產生的 YAML 會變成無效。

{
  "title": "Hello, world!",
  "subtitle": "I'm using WebHooks!"
}

因為產生的 YAML 變成無效,所以沒有管線執行排入佇列以回應。

防止未經授權的管線執行

只要任何人知道您的組織和 Webhook 服務連線的名稱,Webhook 就會允許任何人觸發管線。

您可以在建立傳入 Webhook 服務連線時定義 秘密 ,以防止未經授權的管線執行。 您也必須指定 HTTP 標頭的名稱,其中包含 Webhook 主體的 SHA-1 總和檢查碼。

若要確認傳入的 Webhook REST API 呼叫已獲得授權,Azure Pipelines 會使用秘密作為密鑰來計算要求主體的 SHA-1 總和檢查碼。 然後,它會將它與要求標頭中傳遞的總和檢查碼進行比較。 如此一來,呼叫端就會證明他們知道秘密。

讓我們看看下列範例。 假設您已設定名為 的 IncomingWH傳入 Webhook 服務連線,指定秘密為 secret,而且總和檢查碼會在名為 X-WH-Checksum的 HTTP 標頭中傳送。 假設您有定義 Webhook 資源的管線。

假設您想要使用下列要求本文來觸發管線:

{"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,並使用的值750D33212D3AD4932CC390819050734831A0A94F新增 X-WH-Checksum 標頭。 您不需要指定任何使用者名稱 & 密碼或任何其他類型的驗證資訊。

Azure Pipelines 會單獨使用 secret 作為索引鍵來計算主體的 SHA-1 總和檢查碼,併產生相同的 750D33212D3AD4932CC390819050734831A0A94F 值。 由於值相符,因此呼叫已獲授權,且管線佇列會繼續進行。

您會以虛擬程式代碼計算標頭的值 X-WH-ChecksumSHA1(secret).ComputeHash(requestBody)。 您可以使用 。此用途的 NET 類別 System.Security.Cryptography.HMACSHA1

若要防止因為新行或空格符而導致驗證失敗,建議您以最小化形式傳送本文。 也就是說,傳送

{"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會根據其字串表示來計算,這不同。

另請參閱