Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
サービス フックを使用して、プロジェクトで発生したイベントについて Microsoft 以外のシステムに通知します。 カスタム コンシューマーは、拡張機能のマニフェストで定義されているエンドポイントに HTTP メッセージを送信します。
ヒント
新しい 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 については、以下を参照してください。
この記事では、次のイベントとアクションを含む サンプル コンシューマー サービスを実装する拡張機能の開発について説明します。
- 次のアクションをトリガーするサポートされているイベント:
- コードのプッシュ
- pull request 作成
- Pull request の更新完了
- イベントが発生したときに実行するアクションがサポートされています。
- HTTP メッセージを送信する
注
この記事では、プロジェクトのホーム ディレクトリを ホームとして参照します。
詳細については、 拡張機能の GitHub リポジトリの例を参照してください。 カスタム コンシューマー拡張機能のトリガーとして使用できるサポートされているすべてのイベントの一覧については、「 イベントの種類の一覧」を参照してください。
ヒント
Azure DevOps Extension SDK を使用した拡張機能開発に関する最新のドキュメントを確認してください。
サービス フックのしくみ
サービス フック パブリッシャーは、 一連の イベントを定義します。 サブスクリプションは イベントをリッスンし、 イベント がトリガーされたときに実行される アクション を定義します。
次の図は、一般的なサービス フック フローを示しています。パブリッシャーはイベントを出力し、サブスクリプションはイベントに一致し、アクションは一致が発生したときに実行されます。 この記事の例では、拡張機能によってコンシューマーが実装されます。 サポートされているイベントが発生すると、コンシューマーの構成済みアクションは、拡張マニフェストで指定したエンドポイントに HTTP メッセージを送信します。
拡張機能を作成する
カスタム コンシューマー実装の特定のコントリビューションを基本的な マニフェスト ファイルに追加します。 コントリビューションを追加した後のマニフェストの外観の例を次に示します。
{
"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プロパティは忘れずに更新してください。
拡張機能のコントリビューションごとに、マニフェストによって次の項目が定義されます。
- 貢献の種類 - この場合のコンシューマー サービス (ms.vss-servicehooks.consumer)。
- コントリビューション ターゲット - この場合のコンシューマー サービス (ms.vss-servicehooks.consumers)。
- 各種類のコントリビューションに固有のプロパティ。
コンシューマーには、次のプロパティがあります。
| プロパティ | 説明 |
|---|---|
| 識別子 | コンシューマー サービスの一意の ID。 |
| 名前 | サービス フック サブスクリプションの作成時に表示されるカスタム コンシューマーの名前。 |
| 説明 | コンシューマー サービスについて説明します。 |
| informationUrl | 拡張機能に関する詳細情報を確認します。 |
| 入力ディスクリプタ | コンシューマー サービスでサブスクリプションを作成しているユーザーが使用する入力。 |
| actions | 実行するアクションと、それらのアクションをトリガーするイベントについて説明します。 |
コンシューマーのアクションには、次のプロパティがあります。
| プロパティ | 説明 |
|---|---|
| 識別子 | アクション サービスの ID。 |
| 名前 | アクションの名前。 |
| 説明 | アクションの詳細な説明。 |
| サポートされるイベントタイプ | このアクションを使用できるトリガーの種類の配列。 詳細については、「 イベントの種類の一覧」を参照してください。 |
| publishEvent.url | HTTP メッセージを受信するエンドポイント URL。 この値は、 inputDescriptorsのトークンを使用してテンプレート化できます。ユーザーは、サブスクリプションの作成時に実際の値を提供します。 |
- 拡張機能を Azure DevOps 組織にデプロイし、テストします。