次の方法で共有


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

特性

webhook 文字列。 最初のプロパティとして必要です。
Webhook の名前。 使用できる値: [-_A-Za-z0-9]*。 Azure DevOps webhook の場合、 webhook は常に WebHookである必要があります。

connection 文字列。 必須。
接続の名前。 オフライン Webhook の場合、これは受信 Webhook の種類になります。それ以外の場合は、webhook 拡張機能の種類になります。

type 文字列。
Webhook 拡張機能の名前。 オフライン Webhook の場合は、これを空のままにします。

filters resources.webhooks.webhook.filters.
トリガー フィルターの一覧。

例示

基本的な例

パイプラインは次のように定義できます。

resources:
  webhooks:
    - webhook: WebHook
      connection: IncomingWH

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

webhook を使用してパイプラインをトリガーするには、https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/<WebHook Name>?api-version=6.0-previewPOST要求を行う必要があります。 WebHook 名は、受信 WebHook サービス接続の名前と一致する必要があります。 このエンドポイントは一般公開されており、承認は必要ありません。 要求には次の本文が必要です。

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

Webhook の要求本文からデータにアクセスする場合は、正しくない YAML につながる可能性があることに注意してください。 たとえば、前のパイプラインでステップが - script: echo ${{ parameters.WebHook.resource.message }}読み取り、webhook を使用してパイプラインをトリガーした場合、パイプラインは実行されません。 これは、 ${{ parameters.WebHook.resource.message.title }} を次の JSON を含む messageに置き換えるプロセスで、生成された YAML が無効になるためです。

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

生成された YAML が無効になるため、パイプラインの実行は応答としてキューに入れわれません。

承認されていないパイプラインの実行を防止する

Webhook を使用すると、組織の名前と Webhook サービス接続を知っている限り、誰でもパイプラインをトリガーできます。

受信 Webhook サービス接続を作成するときに シークレット を定義することで、承認されていないパイプラインの実行を防ぐことができます。 Webhook の本文の SHA-1 チェックサムを含む HTTP ヘッダーの名前も指定する必要があります。

受信 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!"}}}

これを行うには、https://dev.azure.com/<org_name>/_apis/public/distributedtask/webhooks/IncomingWH?api-version=6.0-previewするPOST要求を行い、750D33212D3AD4932CC390819050734831A0A94Fの値を持つX-WH-Checksum ヘッダーを追加する必要があります。 ユーザー名とパスワード、またはその他の種類の認証情報を指定する必要はありません。

Azure Pipelines は、キーとして secret を使用して本文の SHA-1 チェックサムを個別に計算し、同じ 750D33212D3AD4932CC390819050734831A0A94F 値を生成します。 値が一致するため、呼び出しは承認され、パイプライン キューが続行されます。

SHA1(secret).ComputeHash(requestBody)として、X-WH-Checksum ヘッダーの値を擬似コードで計算します。 を使用できます。この目的のための 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!"
        }
    }
}

上記の 2 つの JSON オブジェクトは同じオブジェクトを表していますが、異なる SHA-1 チェックサムを生成します。 これは、SHA-1 が文字列表現で計算されるためです。これは異なります。

こちらも参照ください