全部產品
Search
文件中心

Alibaba Cloud DevOps:Webhooks設定

更新時間:Apr 29, 2025

通過程式碼程式庫的 Webhook,服務端在接收到特殊事件(如代碼 Push、程式碼檢閱)時,會調用指定的 URL,並發送一個帶資料的 Post 請求。Webhooks 可以用來觸發 CI 構建、執行鏡像備份,甚至觸發部署到生產環境等功能。

事件說明

推送事件

推送事件指用戶端將代碼 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*@cod***.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
    }                

標籤推送事件

當建立或者刪除標籤時觸發。

  • 要求標頭:

    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
    }
                            

評論事件

當任何一條評論產生時觸發,無論是在代碼提交還是程式碼檢閱的評論。評論資料會存在object_attributes欄位裡。

commit的評論

  • 要求標頭:

    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
      }
    }
                            

程式碼檢閱事件

在建立新的程式碼檢閱、已有的程式碼檢閱的狀態更新,或者源分支有新的提交時觸發。

  • 要求標頭:

    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"
      }
    }

Webhook接收端例子

如果出於測試的目的,想查看Webhook的執行效果,可以用一個簡單的Echo指令碼,將下面指令碼儲存為:print_http_body.rb

require 'webrick'
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"}
teambition.com - - [14/May/2019:11:11:11 EDT] "POST / HTTP/1.1" 200 0
- -> /

使用HTTP Basic Authentication,當觸發支援HTTP Basic Authentication的伺服器時, 允許在 URL 中添加使用者名稱和密碼進行訪問,Webhook URL 形如:http://userName:password@my.host:8080/project/test-job