次の方法で共有


サービス フック用のカスタム コンシューマーを作成する

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022

サービス フックを使用して、Azure DevOps プロジェクトのイベントについて外部システムに通知します。 カスタム コンシューマー拡張機能は、特定のイベントが発生したときに構成したエンドポイントに HTTP POST を送信します。

ヒント

新しい Azure DevOps 拡張機能を開始する場合は、まず、保守されているこれらのサンプル コレクションを試してください。現在の製品ビルドで動作し、最新のシナリオ (プル要求ページにタブを追加するなど) について説明します。

サンプルが組織で機能しない場合は、個人用またはテスト組織にインストールし、拡張機能マニフェストのターゲット ID と API バージョンを現在のドキュメントと比較します。リファレンスと API については、以下を参照してください。

この記事では、サンプル コンシューマー サービスを実装する拡張機能を構築する方法について説明します。 コンシューマーの例:

  • 3 つの Git イベント (コードプッシュ、作成されたプル要求、更新されたプル要求) をリッスンします
  • イベント ペイロードを含む HTTP POST を構成可能なエンドポイント URL に送信します

コード プッシュおよびプル要求イベントの HTTP メッセージを送信するサンプル コンシューマー サービスを示す図。

完全なソースについては、拡張機能の サンプル GitHub リポジトリを参照してください。 使用可能なすべてのイベントの種類については、「 サービス フック イベントの種類」を参照してください。

ヒント

テーマ設定や VSS からの移行など、最新の拡張機能開発ガイダンスについて説明します。SDK については、 Azure DevOps Extension SDK 開発者ポータルを参照してください。

サービス フックのしくみ

サービス フックには、次の 3 つのコンポーネントがあります。

  • パブリッシャーは 、"コードプッシュ" や "pull request created" などのイベントを出力します。
  • サブスクリプションは、特定の イベントをアクションと一致させます。
  • コンシューマー は、HTTP POST の送信など、実行するアクションを定義します。

サービス フック フローを示す図。パブリッシャーはイベントを出力し、サブスクリプションはイベントに一致し、イベントがサブスクリプションと一致するとアクションが実行されます。

この記事では、拡張機能でカスタム コンシューマーを実装します。 一致するイベントが発生すると、コンシューマーは、イベント ペイロードを含む HTTP POST を、サブスクリプションで構成されたエンドポイント URL に送信します。

拡張機能を作成する

1. プロジェクトを設定する

拡張機能プロジェクトを作成します。 手順については、「 Web 拡張機能の開発」を参照してください。

2. コンシューマーへの投稿を追加する

マニフェスト ファイル (vss-extension.json) にコンシューマーコントリビューションを追加します。 次の例は、サービス フック コンシューマーを含む完全なマニフェストを示しています。

{
    "manifestVersion": 1,
    "id": "samples-service-hooks-consumer",
    "version": "0.1.2",
    "name": "Service Hooks Sample",
    "description": "A simple extension that demonstrates how to contribute a consumer service into service hooks.",
    "publisher": "fabrikam",
    "public": false,
    "icons": {
        "default": "images/logo.png"
    },
    "scopes": [],
    "files": [
        {
            "path": "images",
            "addressable": true
        }
    ],
    "content": {
        "details": {
            "path": "readme.md"
        }
    },
    "categories": [
        "Developer samples"
    ],
    "targets": [
        {
            "id": "Microsoft.VisualStudio.Services"
        }
    ],
    "contributions": [
        {
            "id": "consumer",
            "type": "ms.vss-servicehooks.consumer",
            "targets": [
                "ms.vss-servicehooks.consumers"
            ],
            "properties": {
                "id": "consumer",
                "name": "Sample Consumer",
                "description": "Sample consumer service",
                "informationUrl": "https://aka.ms/vsoextensions",
                "inputDescriptors": [
                    {
                        "id": "url",
                        "isRequired": true,
                        "name": "URL",
                        "description": "URL to post event payload to",
                        "inputMode": "textbox"
                    }
                ],
                "actions": [
                    {
                        "id": "performAction",
                        "name": "Perform action",
                        "description": "Posts a standard event payload",
                        "supportedEventTypes": [
                            "git.push",
                            "git.pullrequest.created",
                            "git.pullrequest.updated"
                        ],
                        "publishEvent": {
                            "url": "{{{url}}}",
                            "resourceDetailsToSend": "all",
                            "messagesToSend": "all",
                            "detailedMessagesToSend": "all"
                        }
                    }
                ]
            }
        }
    ]
}

publisher プロパティを、発行元 ID と一致するように更新します。

contributions配列はキー セクションです。 各コントリビューションは次の内容を定義します。

  • : ms.vss-servicehooks.consumer — コンシューマー サービスを登録します
  • ターゲット: ms.vss-servicehooks.consumers — コンシューマー サービス コレクション
  • プロパティ: 入力とアクションを含むコンシューマー構成 ( プロパティリファレンスを参照)

3. パッケージ化、発行、テスト

拡張機能をパッケージ化して Azure DevOps 組織に発行します。 次に、カスタム コンシューマーを使用して動作することを確認するサービス フック サブスクリプションを作成します。

プロパティ リファレンス

コンシューマーの属性

プロパティ 説明
識別子 コンシューマー サービスの一意の ID。
名前 ユーザーがサービス フック サブスクリプションを作成するときに表示される表示名。
説明 コンシューマー サービスについて説明します。
informationUrl ユーザーが拡張機能の詳細を確認できる URL。
入力ディスクリプタ サブスクリプションの作成時にユーザーが提供する入力 (URL エンドポイントなど)。
actions イベントが発生したときに実行するアクションと、各アクションをトリガーするイベントの種類。

アクションのプロパティ

actions配列内の各アクションには、次のプロパティがあります。

プロパティ 説明
識別子 アクションの一意の ID。
名前 アクションの表示名。
説明 アクションの動作の説明。
サポートされるイベントタイプ このアクションをトリガーするイベントの種類 ID の配列。 使用可能な型については、「 サービス フック イベントの種類」を参照してください。
publishEvent.url HTTP POST を受信するエンドポイント URL。 サブスクリプションの作成時にユーザーが指定した{{{inputId}}}の値を置き換える場合は、トリプルブレース 口ひげ構文 (inputDescriptors) を使用します。

次のステップ