Bitbucket Cloud のブローカー/サービスを記述する
新しいブローカーの制限
現在、新しいブローカーの許可は行われていません。POST サービスの使用について、後述の情報をご参照ください。
Bitbucket Cloud は、特定のイベントに対応して実行される一連のブローカー を経由して、外部サービス (hook) と連携します。ブローカーは、イベントの情報を受け取って 1 つ以上のアクションを実行する Python スクリプトです。たとえば、Bamboo と連携するための Bamboo ブローカーがあります。Bitbucket チームはさまざまなブローカーを開発しています。サードパーティ ベンダーも、複数のブローカーを開発しています。
POST サービスを使用してアプリケーションを Bitbucket Cloud と連携する
ほとんどのサードパーティ製アプリケーションは REST API を公開しています。これには Jenkins などがあります。サードパーティの API を使用することで、Bitbucket の POST サービスを使用して対象のサービスにパラメータを渡すことができます。Bitbucket の POST サービスは、サードパーティ製の Web アプリケーションに、アプリの API を経由してペイロードを渡します。ペイロードの受信や転送はサードパーティ製アプリケーション側が行います。
Bitbucket リポジトリに POST サービスを追加するには、次の手順を実行します。
- 対象の POST 呼び出しに対応するサードパーティの REST API を確認します。
たとえば、URL に次のようにユーザー トークンを含めることができます。http://myservice/broker?token=bfkbd
- リポジトリ 設定に移動します。
- 左側のナビゲーションから [サービス] を選択します。
[サービス] ページが表示されます。 - サービスのドロップダウンから [POST] を選択します。
- [サービスの追加] を押します。
- サードパーティ サービスの URL を入力します。
- [保存] を押します。
アクティブなサービスの一覧に新しい POST サービスが表示されます。
ユーザーが次回リポジトリへのプッシュを行うと、POST サービスが実行され、データのペイロードがご利用のサービスに送信されます。サービスはペイロードを受け取り、Bitbucket の REST API を使用してデータを適切に処理します。たとえば、アプリケーションは OAuth を使用する特定のリソースやその他の情報のために Bitbucket へのコールバックを行うことができます。
サービスに送信されるペイロードについて
プッシュのペイロードは、リポジトリ、コミット、およびサービス固有の値を含む、形式の統一されたディクショナリです。
例
{
"canon_url": "https://bitbucket.org",
"commits": [
{
"author": "marcus",
"branch": "featureA",
"files": [
{
"file": "somefile.py",
"type": "modified"
}
],
"message": "Added some featureA things",
"node": "d14d26a93fd2",
"parents": [
"1b458191f31a"
],
"raw_author": "Marcus Bertrand <marcus@somedomain.com>",
"raw_node": "d14d26a93fd28d3166fa81c0cd3b6f339bb95bfe",
"revision": 3,
"size": -1,
"timestamp": "2012-05-30 06:07:03",
"utctimestamp": "2012-05-30 04:07:03+00:00"
}
],
"repository": {
"absolute_url": "/marcus/project-x/",
"fork": false,
"is_private": true,
"name": "Project X",
"owner": "marcus",
"scm": "hg",
"slug": "project-x",
"website": ""
},
"user": "marcus"
}
{
"canon_url": "https://bitbucket.org",
"commits": [
{
"author": "marcus",
"branch": "master",
"files": [
{
"file": "somefile.py",
"type": "modified"
}
],
"message": "Added some more things to somefile.py\n",
"node": "620ade18607a",
"parents": [
"702c70160afc"
],
"raw_author": "Marcus Bertrand <marcus@somedomain.com>",
"raw_node": "620ade18607ac42d872b568bb92acaa9a28620e9",
"revision": null,
"size": -1,
"timestamp": "2012-05-30 05:58:56",
"utctimestamp": "2012-05-30 03:58:56+00:00"
}
],
"repository": {
"absolute_url": "/marcus/project-x/",
"fork": false,
"is_private": true,
"name": "Project X",
"owner": "marcus",
"scm": "git",
"slug": "project-x",
"website": "https://atlassian.com/"
},
"user": "marcus"
}