プルリクエスト POST サービスの管理
リポジトリ管理者はリポジトリに Pull Request POST サービスを追加できます。Bitbucket Cloud は、指定したサービス URL にプル リクエスト イベントのデータを POST します。次の形式の URL を指定できます。
https://user:password@server:port/path/
Bitbucket では、HTTPS と BASIC 認証がサポートされます。Pull Request POST サービスを構成する際に、取得対象として次のイベント データを選択できます。
イベント | 説明 |
---|---|
承認 / 未承認 | ユーザーがプル リクエストで承認をセットまたは解除したときにトリガーされます。 |
コメント | ユーザーがプル リクエスト コメントを作成、編集、または削除したときにトリガーされます。 |
作成 / 編集 / マージ / 却下 | ユーザーがプル リクエストを作成、編集、マージ、または却下したときにトリガーされます。 |
POST のコンテンツ ヘッダーには application/json
タイプが含まれます。このサービスは、HTTP の公開 / サブスクライブ サービスと似た挙動を持ちます。ペイロードは json ドキュメントです。
POST リクエストは、131.103.20.165 と 131.103.20.166 の IP アドレスから送信されます。これらの IP アドレスからの接続を許可するようにファイアウォールを構成する必要がある場合があります。
Pull Request POST サービスを構成する
POST サービスを手動でセットアップすることも、自動化するためのサービスを記述することもできます。アプリケーションを Bitbucket と連携させる場合、サービスを記述します。
リポジトリ管理画面からの手動構成
- リポジトリの 設定に移動します。
- 左側のナビゲーションにある [サービス] をクリックします。
サービス ページが表示されます。 - サービスのドロップダウン リストから [Pull Request POST] サービスを選択します。
- [サービスの追加] をクリックします。
[POST] サービスに新しいセクションが表示されます。 Bitbucket の更新メッセージの送信先の URL を入力します。
- 対象のプル リクエスト イベントのチェックボックスを選択します。
- [保存] をクリックします。
他のアプリケーションから URL を自動的に構成
Bitbucket Cloud と連携していて、ユーザー向けのサービスを簡単に追加したい場合、2 つの方法でこれを自動化できます。ユーザーに、次のような構造の URL を送信します。
https://bitbucket.org/{username}/{repo_slug}/admin/services?service=Pull%20Request%20POST&url={URL}&create%2Fedit%2Fmerge%2Fdecline=on&comments=on&approve%2Funapprove=on
OAuth を使用しているか、BASIC 認証を利用している場合、API を使用して同じ内容を実現できます。
https://api.bitbucket.org/1.0/repositories/{username}/{repo_slug}/services/ -data "type=POST&URL=https%3A%2F%2Fwww.test.comcreate%2Fedit%2Fmerge%2Fdecline=on&comments=on&approve%2Funapprove=on"
POST データの例
ユーザーがリポジトリへのプル リクエストを行うと、Bitbucket は提供された URL への POST を行います。POST リクエストのボディには、プル リクエストの変更についての情報が含まれます。
例
{
"pullrequest_approve":{
"date": "2013-11-05T02:03:03.551896+00:00",
"user": {
"display_name": "Erik van Zijst",
"links": {
"avatar": {
"href": "https://bitbucket-staging-assetroot.s3.amazonaws.com/c/photos/2013/Oct/28/evzijst-avatar-3454044670-3_avatar.png"
},
"self": {
"href": "http://api.bitbucket.org/2.0/users/evzijst"
}
},
"username": "evzijst"
}
}
}
{
"pullrequest_comment_created":{
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/pullrequests/24/comments/13"
},
"code": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/diff/evzijst/bitbucket2:325625d47b0a..82d48819e5f7?path=apps%2Faccount%2Ftemplatetags%2Faccount.py"
},
"html": {
"href": "https://bitbucket.org/evzijst/bitbucket2/pull-request/24/_/diff#comment-13"
}
},
"content": {
"raw": "Inline comment.",
"markup": "markdown",
"html": "<p>Inline comment.</p>"
},
"created_on": "2013-11-07T05:23:36.013764+00:00",
"user": {
"username": "evzijst",
"display_name": "Erik van Zijst",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/evzijst"
},
"avatar": {
"href": "https://bitbucket-staging-assetroot.s3.amazonaws.com/c/photos/2013/Oct/28/evzijst-avatar-3454044670-3_avatar.png"
}
}
},
"updated_on": "2013-11-07T05:23:36.015070+00:00",
"inline": {
"to": 237,
"from": null,
"path": "apps/account/templatetags/account.py"
},
"id": 13
}
}
{
"pullrequest_comment_deleted":{
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/pullrequests/24/comments/13"
},
"code": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/diff/evzijst/bitbucket2:325625d47b0a..82d48819e5f7?path=apps%2Faccount%2Ftemplatetags%2Faccount.py"
},
"html": {
"href": "https://bitbucket.org/evzijst/bitbucket2/pull-request/24/_/diff#comment-13"
}
},
"content": {
"raw": "Inline comment.",
"markup": "markdown",
"html": "<p>Inline comment.</p>"
},
"created_on": "2013-11-07T05:23:36.013764+00:00",
"user": {
"username": "evzijst",
"display_name": "Erik van Zijst",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/evzijst"
},
"avatar": {
"href": "https://bitbucket-staging-assetroot.s3.amazonaws.com/c/photos/2013/Oct/28/evzijst-avatar-3454044670-3_avatar.png"
}
}
},
"updated_on": "2013-11-07T05:23:36.015070+00:00",
"inline": {
"to": 237,
"from": null,
"path": "apps/account/templatetags/account.py"
},
"id": 13
}
}
{
"pullrequest_comment_updated":{
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/pullrequests/24/comments/13"
},
"code": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/diff/evzijst/bitbucket2:325625d47b0a..82d48819e5f7?path=apps%2Faccount%2Ftemplatetags%2Faccount.py"
},
"html": {
"href": "https://bitbucket.org/evzijst/bitbucket2/pull-request/24/_/diff#comment-13"
}
},
"content": {
"raw": "Inline comment.",
"markup": "markdown",
"html": "<p>Inline comment.</p>"
},
"created_on": "2013-11-07T05:23:36.013764+00:00",
"user": {
"username": "evzijst",
"display_name": "Erik van Zijst",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/evzijst"
},
"avatar": {
"href": "https://bitbucket-staging-assetroot.s3.amazonaws.com/c/photos/2013/Oct/28/evzijst-avatar-3454044670-3_avatar.png"
}
}
},
"updated_on": "2013-11-07T05:23:36.015070+00:00",
"inline": {
"to": 237,
"from": null,
"path": "apps/account/templatetags/account.py"
},
"id": 13
}
}
{
"pullrequest_created":{
"description": "Added description",
"links": {
"decline": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/pullrequests/24/decline"
},
"commits": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/pullrequests/24/commits"
},
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/pullrequests/24"
},
"comments": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/pullrequests/24/comments"
},
"patch": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/pullrequests/24/patch"
},
"merge": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/pullrequests/24/merge"
},
"html": {
"href": "https://bitbucket.org/evzijst/bitbucket2/pull-request/24"
},
"activity": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/pullrequests/24/activity"
},
"diff": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/pullrequests/24/diff"
},
"approve": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/pullrequests/24/approve"
}
},
"title": "PR title",
"close_source_branch": true,
"reviewers": [
{
"username": "nvenegas",
"display_name": "Nicolas Venegas",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/nvenegas"
},
"avatar": {
"href": "http://www.gravatar.com/avatar/d41d8cd98f00b204e9800998ecf8427e?d=&s=32"
}
}
}
],
"destination": {
"commit": {
"hash": "82d48819e5f7",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/commit/82d48819e5f7"
}
}
},
"branch": {
"name": "staging"
},
"repository": {
"full_name": "evzijst/bitbucket2",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2"
},
"avatar": {
"href": "https://bitbucket.org/m/bf1e763db20f/img/language-avatars/default_16.png"
}
},
"name": "bitbucket2"
}
},
"state": "OPEN",
"id": 24,
"source": {
"commit": {
"hash": "325625d47b0a",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/commit/325625d47b0a"
}
}
},
"branch": {
"name": "mfrauenholtz/inbox"
},
"repository": {
"full_name": "evzijst/bitbucket2",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2"
},
"avatar": {
"href": "http://bitbucket.org/m/bf1e763db20f/img/language-avatars/default_16.png"
}
},
"name": "bitbucket2"
}
},
"reason": "",
"author": {
"username": "evzijst",
"display_name": "Erik van Zijst",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/evzijst"
},
"avatar": {
"href": "https://bitbucket-staging-assetroot.s3.amazonaws.com/c/photos/2013/Oct/28/evzijst-avatar-3454044670-3_avatar.png"
}
}
},
"created_on": "2013-11-04T23:41:48.941334+00:00",
"participants": [
{
"role": "REVIEWER",
"user": {
"username": "nvenegas",
"display_name": "Nicolas Venegas",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/nvenegas"
},
"avatar": {
"href": "http://www.gravatar.com/avatar/d41d8cd98f00b204e9800998ecf8427e?d=&s=32"
}
}
},
"approved": false
},
{
"role": "PARTICIPANT",
"user": {
"username": "evzijst",
"display_name": "Erik van Zijst",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/evzijst"
},
"avatar": {
"href": "https://bitbucket-staging-assetroot.s3.amazonaws.com/c/photos/2013/Oct/28/evzijst-avatar-3454044670-3_avatar.png"
}
}
},
"approved": true
}
],
"updated_on": "2013-11-08T18:55:37.272783+00:00",
"merge_commit": null,
"closed_by": null
}
}
{
"pullrequest_merged": {
"description": "",
"title": "Inbox changes",
"close_source_branch": true,
"destination": {
"commit": {
"hash": "82d48819e5f7",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/commit/82d48819e5f7"
}
}
},
"repository": {
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2"
},
"avatar": {
"href": "https://bitbucket.org/m/d864f6bcaa94/img/language-avatars/default_16.png"
}
},
"full_name": "evzijst/bitbucket2",
"name": "bitbucket2"
},
"branch": {
"name": "staging"
}
},
"reason": "",
"source": {
"commit": {
"hash": "325625d47b0a",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/commit/325625d47b0a"
}
}
},
"repository": {
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2"
},
"avatar": {
"href": "https://bitbucket.org/m/d864f6bcaa94/img/language-avatars/default_16.png"
}
},
"full_name": "evzijst/bitbucket2",
"name": "bitbucket2"
},
"branch": {
"name": "mfrauenholtz/inbox"
}
},
"state": "MERGED",
"author": {
"username": "evzijst",
"display_name": "Erik van Zijst",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/evzijst"
},
"avatar": {
"href": "https://bitbucket-staging-assetroot.s3.amazonaws.com/c/photos/2013/Oct/28/evzijst-avatar-3454044670-3_avatar.png"
}
}
},
"date": "2013-11-08T19:49:12.233187+00:00"
}
}
{
"pullrequest_declined": {
"description": "Added description",
"title": "PR title",
"close_source_branch": false,
"destination": {
"commit": {
"hash": "82d48819e5f7",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/commit/82d48819e5f7"
}
}
},
"branch": {
"name": "staging"
},
"repository": {
"full_name": "evzijst/bitbucket2",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2"
},
"avatar": {
"href": "https://api.bitbucket.org/m/bf1e763db20f/img/language-avatars/default_16.png"
}
},
"name": "bitbucket2"
}
},
"state": "DECLINED",
"source": {
"commit": {
"hash": "325625d47b0a",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2/commit/325625d47b0a"
}
}
},
"branch": {
"name": "mfrauenholtz/inbox"
},
"repository": {
"full_name": "evzijst/bitbucket2",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/repositories/evzijst/bitbucket2"
},
"avatar": {
"href": "https://api.bitbucket.org/m/bf1e763db20f/img/language-avatars/default_16.png"
}
},
"name": "bitbucket2"
}
},
"reason": "Weak sauce.",
"author": {
"username": "evzijst",
"display_name": "Erik van Zijst",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/evzijst"
},
"avatar": {
"href": "https://bitbucket-staging-assetroot.s3.amazonaws.com/c/photos/2013/Oct/28/evzijst-avatar-3454044670-3_avatar.png"
}
}
},
"date": "2013-11-04T23:41:48.941334+00:00"
}
}
{
"pullrequest_unapprove":{
"date":"2013-07-19 21:34:33+00:00",
"user":{
"username":"detkin",
"display_name":"Dylan Etkin",
"links":[
{
"href":"https://api.bitbucket.org/1.0/users/detkin",
"rel":"self"
},
{
"href":"https://bitbucket.org/detkin",
"rel":"html"
}
]
}
}
}
{
"pullrequest_updated":{
"state":"OPEN",
"description":"README.md made even better",
"title":"README.md made even better",
"destination":{
"commit":{
"hash":"927fd129ad69",
"links":[
{
"href":"https://api.bitbucket.org/2.0/repositories/detkin/test/commit/927fd129ad69",
"rel":"self"
}
]
},
"repository":{
"links":[
{
"href":"https://api.bitbucket.org/1.0/repositories/detkin/test",
"rel":"self"
},
{
"href":"https://bitbucket.org/detkin/test",
"rel":"html"
},
{
"href":"https://bitbucket.org/detkin/test",
"type":"https",
"rel":"clone"
},
{
"href":"ssh://hg@bitbucket.org/detkin/test",
"type":"ssh",
"rel":"clone"
}
],
"full_name":"detkin/test"
},
"branch":{
"name":"default"
}
},
"source":{
"commit":{
"hash":"6ddd631f33de",
"links":[
{
"href":"https://api.bitbucket.org/2.0/repositories/detkin/test/commit/6ddd631f33de",
"rel":"self"
}
]
},
"repository":{
"links":[
{
"href":"https://api.bitbucket.org/1.0/repositories/detkin/test",
"rel":"self"
},
{
"href":"https://bitbucket.org/detkin/test",
"rel":"html"
},
{
"href":"https://bitbucket.org/detkin/test",
"type":"https",
"rel":"clone"
},
{
"href":"ssh://hg@bitbucket.org/detkin/test",
"type":"ssh",
"rel":"clone"
}
],
"full_name":"detkin/test"
},
"branch":{
"name":"detkin/readmemd-made-even-better"
}
},
"reason":"",
"author": {
"username": "evzijst",
"display_name": "Erik van Zijst",
"links": {
"self": {
"href": "https://api.bitbucket.org/2.0/users/evzijst"
},
"avatar": {
"href": "https://bitbucket-staging-assetroot.s3.amazonaws.com/c/photos/2013/Oct/28/evzijst-avatar-3454044670-3_avatar.png"
}
}
},
"date":"2013-07-19 21:04:15+00:00"
}
}