Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022
サービス フックを使用して、Azure DevOps プロジェクトのイベントについて外部システムに通知します。 カスタム コンシューマー拡張機能は、特定のイベントが発生したときに構成したエンドポイントに HTTP POST を送信します。
ヒント
新しい Azure DevOps 拡張機能を開始する場合は、まず、保守されているこれらのサンプル コレクションを試してください。現在の製品ビルドで動作し、最新のシナリオ (プル要求ページにタブを追加するなど) について説明します。
- Azure DevOps 拡張機能サンプル (GitHub) - 一般的な拡張機能パターンを示すコンパクトなスターター サンプルです。 https://github.com/microsoft/azure-devops-extension-sample
- Azure DevOps 拡張機能のサンプル (レガシ コレクションとコントリビューション ガイド) - UI ターゲットを検査したり、ソースを表示したりするためにインストールします。 https://marketplace.visualstudio.com/items/ms-samples.samples-contributions-guide と https://github.com/Microsoft/vso-extension-samples/tree/master/contributions-guide
- Microsoft Learn のサンプル (Azure DevOps サンプルを参照) - Microsoft ドキュメント全体でキュレーションされた、最新のサンプルです: /samples/browse/?terms=azure%20devops%20extension
サンプルが組織で機能しない場合は、個人用またはテスト組織にインストールし、拡張機能マニフェストのターゲット ID と API バージョンを現在のドキュメントと比較します。リファレンスと API については、以下を参照してください。
この記事では、サンプル コンシューマー サービスを実装する拡張機能を構築する方法について説明します。 コンシューマーの例:
- 3 つの Git イベント (コードプッシュ、作成されたプル要求、更新されたプル要求) をリッスンします
- イベント ペイロードを含む HTTP POST を構成可能なエンドポイント URL に送信します
完全なソースについては、拡張機能の サンプル 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) を使用します。 |