通過代碼庫Webhook,允許服務端在接收到特殊事件的時候,調用指定的URL觸發(fā)期望行為,本文介紹云效代碼管理的WebHooks 以及對應參數(shù)說明。
功能說明
當滿足觸發(fā)事件時,代碼管理Codeup會發(fā)送一個帶數(shù)據(jù)的Post請求到Webhook指定的URL。Webhooks 可用于觸發(fā)CI構建、執(zhí)行鏡像備份、觸發(fā)部署到生產環(huán)境等場景。功能設置如下:
代碼庫管理員通過左側菜單欄單擊設置,選擇WebHooks。
單擊新建 WebHook打開對話框。
填寫事件接收方 URL 地址。
(可選)填寫Secret Token,將在請求的 X-Codeup-Token HTTP頭中發(fā)送,用于接收方驗證請求合法性。
選擇觸發(fā)器,包括:推送事件、標簽推送事件、評論事件、合并請求事件。
(可選)填寫描述信息。
單擊確定完成創(chuàng)建。
事件說明
推送事件
推送事件指客戶端將代碼Push到服務端,有一個例外:Push標簽,不會形成推送事件。
請求頭
Codeup-Event: Push Hook
請求內容
{
"object_kind": "push",
"before": "f2e2d577fab1562a6239b82721fd9827e05fdce6",
"after": "eb63d0277e64684236ebf8394b919230c4b8a286",
"ref": "refs/heads/master",
"user_id": 4,
"user_name": "Codeup",
"user_email": "cod***@aliyun.com",
"project_id": 15,
"repository": {
"name": "Diaspora",
"url": "gi*@codeup.aliyun.com:demo/demo.git",
"description": "",
"homepage": "https://codeup.aliyun.com/demo/demo",
"git_http_url":"https://codeup.aliyun.com/demo/demo.git",
"git_ssh_url":"gi*@codeup.aliyun.com:demo/demo.git",
"visibility_level":0
},
"commits": [
{
"id": "f2e2d577fab1562a6239b82721fd9827e05fdce6",
"message": "Update readme.",
"timestamp": "2019-01-01T00:08:00+08:00",
"url": "https://codeup.aliyun.com/demo/demo/commits/f2e2d577fab1562a6239b82721fd9827e05fdce6",
"author": {
"name": "Codeup",
"email": "cod***@aliyun.com"
}
},
{
"id": "eb63d0277e64684236ebf8394b919230c4b8a286",
"message": "fixed readme",
"timestamp": "2019-01-03T23:36:29+08:00",
"url": "https://codeup.aliyun.com/demo/demo/commits/eb63d0277e64684236ebf8394b919230c4b8a286",
"author": {
"name": "Codeup",
"email": "cod***@aliyun.com"
}
}
],
"total_commits_count": 2
}
標簽推送事件
當創(chuàng)建或者刪除標簽時觸發(fā)
請求頭
Codeup-Event: Tag Push Hook
請求體
{
"object_kind": "tag_push",
"ref": "refs/tags/v1.0.0",
"before": "0000000000000000000000000000000000000000",
"after": "eb63d0277e64684236ebf8394b919230c4b8a286",
"user_id": 1,
"user_name": "Codeup",
"project_id": 1,
"repository": {
"name": "demo",
"url": "ssh://gi*@codeup.aliyun.com/demo/demo.git",
"description": "",
"homepage": "https://codeup.aliyun.com/demo/demo",
"git_http_url":"https://codeup.aliyun.com/demo/demo.git",
"git_ssh_url":"gi*@codeup.aliyun.com:demo/demo.git",
"visibility_level":0
},
"commits": [],
"total_commits_count": 0
}
評論事件
當任何一條評論生成時觸發(fā),無論是在代碼提交、代碼評審的評論。評論數(shù)據(jù)會存在object_attributes字段里。
提交的評論
請求頭
Codeup-Event: Note Hook
請求體
{
"object_kind": "note",
"user": {
"name": "Codeup",
"username": "Codeup",
"avatar_url": ""
},
"project_id": 5,
"repository": {
"name": "demo",
"url": "https://codeup.aliyun.com/demo/demo.git",
"description": "demo.",
"homepage": "https://codeup.aliyun.com/demo/demo"
},
"object_attributes": {
"id": 1243,
"note": "This is a commit comment. How does this work?",
"noteable_type": "Commit",
"author_id": 1,
"created_at": "2019-05-17 18:08:09 UTC",
"updated_at": "2019-05-17 18:08:09 UTC",
"project_id": 5,
"attachment":null,
"line_code": "bec9703f7a456cd2b4ab5fb3220ae016e3e394e3_0_1",
"commit_id": "cfe32cf61b73a0d5e9f13e774abde7ff789b1660",
"noteable_id": null,
"system": false,
"st_diff": {
"diff": "--- /dev/null\n+++ b/six\n@@ -0,0 +1 @@\n+Subproject commit 409f37c4f05865e4fb208c771485f211a22c4c2d\n",
"new_path": "six",
"old_path": "six",
"a_mode": "0",
"b_mode": "160000",
"new_file": true,
"renamed_file": false,
"deleted_file": false
},
"url": "https://codeup.aliyun.com/demo/demo/commits/cfe32cf61b73a0d5e9f13e774abde7ff789b1660#note_1243"
},
"commit": {
"id": "cfe32cf61b73a0d5e9f13e774abde7ff789b1660",
"message": "Add submodule",
"timestamp": "2019-02-27T10:06:20+02:00",
"url": "https://codeup.aliyun.com/demo/demo/commits/cfe32cf61b73a0d5e9f13e774abde7ff789b1660",
"author": {
"name": "Demo",
"email": "de**@gmail.com"
}
}
}
合并請求的評論(舊版)
請求頭
Codeup-Event: Note Hook
請求體
{
"object_kind": "note",
"user": {
"name": "Codeup",
"username": "codeup",
"avatar_url": ""
},
"project_id": 5,
"repository": {
"name": "demo",
"url": "https://codeup.aliyun.com/demo/demo/.git",
"description": "Aut reprehenderit ut est.",
"homepage": "https://codeup.aliyun.com/demo/demo"
},
"object_attributes": {
"id": 1244,
"note": "This MR needs work.",
"noteable_type": "MergeRequest",
"author_id": 1,
"created_at": "2019-05-17 18:21:36 UTC",
"updated_at": "2019-05-17 18:21:36 UTC",
"project_id": 5,
"attachment": null,
"line_code": null,
"commit_id": "",
"noteable_id": 7,
"system": false,
"st_diff": null,
"url": "https://codeup.aliyun.com/demo/demo/merge_requests/1#note_1244"
},
"merge_request": {
"id": 7,
"target_branch": "markdown",
"source_branch": "master",
"source_project_id": 5,
"author_id": 8,
"assignee_id": 28,
"title": "Tempora et eos debitis quae laborum et.",
"created_at": "2019-03-01 20:12:53 UTC",
"updated_at": "2019-03-21 18:27:27 UTC",
"milestone_id": 11,
"state": "opened",
"merge_status": "cannot_be_merged",
"target_project_id": 5,
"iid": 1,
"description": "Et voluptas corrupti assumenda temporibus. Architecto cum animi eveniet amet asperiores. Vitae numquam voluptate est natus sit et ad id.",
"position": 0,
"locked_at": null,
"source": {
"name": "demo",
"ssh_url": "gi*@codeup.aliyun.com:demo/demo.git",
"http_url": "https://codeup.aliyun.com/demo/demo.git",
"web_url": "https://codeup.aliyun.com/demo/demo",
"namespace": "demo",
"visibility_level": 10
},
"target": {
"name": "demo",
"ssh_url": "gi*@codeup.aliyun.com:demo/demo.git",
"http_url": "https://codeup.aliyun.com/demo/demo.git",
"web_url": "https://codeup.aliyun.com/demo/demo",
"namespace": "demo",
"visibility_level": 10
},
"last_commit": {
"id": "562e173be03b8ff2efb05345d12df18815438a4b",
"message": "Merge branch 'another-branch' into 'master'\n\nCheck in this test\n",
"timestamp": "2019-04-08T21: 00:25-07:00",
"url": "https://codeup.aliyun.com/demo/demo/commits/562e173be03b8ff2efb05345d12df18815438a4b",
"url": "https://codeup.aliyun.com/demo/demo/commits/562e173be03b8ff2efb05345d12df18815438a4b",
"author": {
"name": "Codeup",
"email": "cod***@aliyun.com"
}
},
"work_in_progress": false
}
}
合并請求的評論(新版)
合并請求新版自2023年8月逐步開放中,新版介紹參見合并請求能力概述。
請求頭
Codeup-Event: Note Hook
請求體
{
"commit": null,
"merge_request": {
"author_aliyun_pk": "297541067872644100",
"author_id": 19271,
"biz_id": "4901786402db48aaab6450b8d12480d2",
"created_at": "2023-07-10T14:25:30+08:00",
"description": "",
"is_update_by_push": false,
"last_commit": {
"author": {
"email": "te**@test.com",
"name": "test"
},
"id": "b4f8b799e9698278efb7d23bfae4fff17252eba3",
"message": "更新 2.txt",
"timestamp": "2023-06-13T10:09:53+08:00",
"url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr/commits/b4f8b799e9698278efb7d23bfae4fff17252eba3"
},
"local_id": 247,
"merge_status": "cannot_be_merged",
"project_id": 609042,
"source": {
"http_url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr.git",
"name": "test_new_crd",
"namespace": "6369b7bb801ae2503bb96f8b",
"ssh_url": "gi*@codeup.aliyun.com:6369b7bb801ae2503bb96f8b/test_new_cr.git",
"visibility_level": 0,
"web_url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr"
},
"source_branch": "test_xxx",
"source_project_id": 609042,
"source_type": "BRANCH",
"state": "opened",
"target": {
"http_url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr.git",
"name": "test_new_crd",
"namespace": "6369b7bb801ae2503bb96f8b",
"ssh_url": "gi*@codeup.aliyun.com:6369b7bb801ae2503bb96f8b/test_new_cr.git",
"visibility_level": 0,
"web_url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr"
},
"target_branch": "master",
"target_project_id": 609042,
"title": "更新 2.txt",
"updated_at": "2023-07-10T14:25:30+08:00",
"url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr/change/247",
"work_in_progress": false
},
"object_attributes": {
"author_aliyun_pk": "297541067872644100",
"author_id": 19271,
"closed": 0,
"commit_id": "b4f8b799e9698278efb7d23bfae4fff17252eba3",
"created_at": "2023-07-10T14:25:39+08:00",
"file_path": "1.txt",
"line_code": "9",
"note": "xaxas",
"note_biz_id": "051efb1b3aef435a968bca00e7592c32",
"note_type": "INLINE_COMMENT",
"noteable_id": "29bd1475cffd4c1cb1f17f604fc4e104",
"noteable_type": "MergeRequest",
"project_id": 609042,
"related_biz_id": "29bd1475cffd4c1cb1f17f604fc4e104",
"related_patch_set": {
"branch": "test_xxx",
"commit_id": "b4f8b799e9698278efb7d23bfae4fff17252eba3",
"create_time": "2023-07-10T14:25:30+08:00",
"mr_biz_id": "4901786402db48aaab6450b8d12480d2",
"patch_set_biz_id": "29bd1475cffd4c1cb1f17f604fc4e104",
"patch_set_name": "版本1",
"version_no": 1
},
"related_type": "CODE_REVIEW_PATCH_SET",
"state": "OPENED",
"system": false,
"updated_at": "2023-07-10T14:25:39+08:00",
"url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr/change/247?comment=051efb1b3aef435a968bca00e7592c32"
},
"object_kind": "note",
"repository": {
"git_http_url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr.git",
"git_ssh_url": "gi*@codeup-proxy.aliyun.com:6369b7bb801ae2503bb96f8b/test_new_cr.git",
"homepage": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr",
"name": "test_new_crd",
"url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr.git"
},
"user": {
"aliyun_pk": "297541067872644100",
"avatar_url": "https://tcs-devops.aliyuncs.com/thumbnail/112n76790347a42173fdca7ace673b123a59/w/100/h/100",
"extern_uid": "6369b7b14f6a9c17e247d43e",
"name": "test",
"username": "test"
},
"version": "new"
}
合并請求事件
在創(chuàng)建新的合并請求,或已有合并請求狀態(tài)發(fā)生更新,或源分支有新的提交時將觸發(fā),事件包括:
創(chuàng)建合并請求。
更新合并請求。
通過合并請求。
合并合并請求。
關閉合并請求。
重新打開合并請求。
合并請求的事件(舊版)
請求頭
Codeup-Event: Merge Request Hook
請求體
{
"object_kind": "merge_request",
"user": {
"name": "Codeup",
"username": "codeup",
"avatar_url": ""
},
"object_attributes": {
"id": 99,
"target_branch": "master",
"source_branch": "ms-viewport",
"source_project_id": 14,
"author_id": 51,
"assignee_id": 6,
"title": "MS-Viewport",
"created_at": "2019-09-03T17:23:00Z",
"updated_at": "2019-09-03T17:23:00Z",
"st_commits": null,
"st_diffs": null,
"milestone_id": null,
"state": "opened",
"merge_status": "unchecked",
"target_project_id": 14,
"iid": 1,
"description": "",
"source": {
"name": "demo",
"ssh_url": "gi*@codeup.aliyun.com:demo/demo.git",
"http_url": "https://codeup.aliyun.com/demo/demo.git",
"web_url": "https://codeup.aliyun.com/demo/demo",
"namespace": "demo",
"visibility_level": 10
},
"target": {
"name": "demo",
"ssh_url": "gi*@codeup.aliyun.com:demo/demo.git",
"http_url": "https://codeup.aliyun.com/demo/demo.git",
"web_url": "https://codeup.aliyun.com/demo/demo",
"namespace": "demo",
"visibility_level": 10
},
"last_commit": {
"id": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
"message": "fixed readme",
"timestamp": "2019-02-03T23:36:29+02:00",
"url": "https://codeup.aliyun.com/demo/demo/commits/da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
"author": {
"name": "Codeup",
"email": "cod***@aliyun.com"
}
},
"work_in_progress": false,
"url": "https://codeup.aliyun.com/demo/demo/merge_requests/1",
"action": "open"
}
}
合并請求的事件(新版)
合并請求新版自2023年8月逐步開放中,新版介紹參見合并請求能力概述。
請求頭
Codeup-Event: Merge Request Hook
請求體
{
"object_attributes": {
"action": "open",
"author_aliyun_pk": "297541067872644100",
"author_id": 19271,
"biz_id": "4901786402db48aaab6450b8d12480d2",
"created_at": "2023-07-10T14:25:30+08:00",
"description": "",
"is_update_by_push": false,
"last_commit": {
"author": {
"email": "te**@test.com",
"name": "test"
},
"id": "b4f8b799e9698278efb7d23bfae4fff17252eba3",
"message": "更新 2.txt",
"timestamp": "2023-06-13T10:09:53+08:00",
"url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr/commits/b4f8b799e9698278efb7d23bfae4fff17252eba3"
},
"local_id": 247,
"merge_status": "unchecked",
"project_id": 609042,
"source": {
"http_url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr.git",
"name": "test_new_crd",
"namespace": "6369b7bb801ae2503bb96f8b",
"ssh_url": "gi*@codeup.aliyun.com:6369b7bb801ae2503bb96f8b/test_new_cr.git",
"visibility_level": 0,
"web_url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr"
},
"source_branch": "test_xxx",
"source_project_id": 609042,
"source_type": "BRANCH",
"state": "opened",
"target": {
"http_url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr.git",
"name": "test_new_crd",
"namespace": "6369b7bb801ae2503bb96f8b",
"ssh_url": "gi*@codeup.aliyun.com:6369b7bb801ae2503bb96f8b/test_new_cr.git",
"visibility_level": 0,
"web_url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr"
},
"target_branch": "master",
"target_project_id": 609042,
"title": "更新 2.txt",
"updated_at": "2023-07-10T14:25:30+08:00",
"url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr/change/247",
"work_in_progress": false
},
"object_kind": "merge_request",
"repository": {
"git_http_url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr.git",
"git_ssh_url": "gi*@codeup.aliyun.com:6369b7bb801ae2503bb96f8b/test_new_cr.git",
"homepage": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr",
"name": "test_new_crd",
"url": "https://codeup.aliyun.com/6369b7bb801ae2503bb96f8b/test_new_cr.git"
},
"user": {
"aliyun_pk": "297541067872644100",
"avatar_url": "https://tcs-devops.aliyuncs.com/thumbnail/112n76790347a42173fdca7ace673b123a59/w/100/h/100",
"extern_uid": "6369b7b14f6a9c17e247d43e",
"name": "test",
"username": "test"
},
"version": "new"
}
Webhook 接收端例子
如果出于測試的目的,想看下Webhook的執(zhí)行效果,可以使用簡單的Echo腳本。
把下面的腳本保存為print_http_body.rb
:
server = WEBrick::HTTPServer.new(:Port => ARGV.first)
server.mount_proc '/' do |req, res|
puts req.body
end
trap 'INT' do
server.shutdown
end
server.start
選個未被使用的端口(比如8000),并啟動腳本:ruby print_http_body.rb 8000
然后在Codeup上配置Webhook的URL為http://my.host:8000/
。
在Codeup上單擊Test Hook,可以在命令行里看到如下內容:
{"before":"f2e2d577fab1562a6239b82721fd9827e05fdce6","after":"eb63d0277e64684236ebf8394b919230c4b8a286"}
aliyun.com - - [14/May/2019:11:11:11 EDT] "POST / HTTP/1.1" 200 0
- -> /
使用 HTTP Basic Authentication
當觸發(fā)支持 HTTP Basic Authentication 的服務器時, 允許在 URL中添加用戶名和密碼進行訪問,Webhook形如:http://userName:password@my.host:8080/project/test-job
。