Webhook 概览

本页介绍了 Secure Source Manager Webhook。如需设置 Webhook,请按照设置 Webhook 中的说明操作。

Webhook 是由 Secure Source Manager 代码库中的事件触发的 HTTP 请求,然后发送到用户指定的网址。

网络钩子设置

Webhook 只能在 Secure Source Manager 网页界面中配置。以下字段可配置:

钩子 ID
Webhook 的人类可读名称。钩子 ID 必须遵循资源命名惯例。它们只能包含小写字母、数字或短划线,必须以字母开头,并且在创建 Webhook 后无法更改。
目标网址
网络钩子目标网址。webhook 目标是一个开放的公共网址。
敏感查询字符串

敏感查询字符串会以 TARGET_URL?SENSITIVE_QUERY_STRING 格式附加到目标网址的末尾。

大多数服务都会提供令牌或密钥,以确保传入请求来自已获授权的服务。为了验证请求,您可以将所需的令牌或密钥存储在敏感的查询字符串中。

触发对象

触发 webhook 请求的事件。选项包括:推送(在向代码库推送时触发)或拉取请求状态已更改(在拉取请求打开、关闭、重新打开或修改时触发)。

推送事件的 Git 引用过滤条件

一个过滤条件,用于指定要针对推送事件报告哪些分支(以 glob 模式指定)。如需了解语法,请参阅 glob 文档。

有效

如果选择此选项,Webhook 会在触发事件时发送请求。如果未选中,则不发送任何请求。

测试 Webhook

配置网络钩子后,您可以使用网络钩子标签页中的测试传送按钮来测试网络钩子。

活动信息示例

以下示例展示了 Secure Source Manager 针对不同 webhook 事件发送到目标网址的事件信息。

推送事件载荷

推送事件载荷的内容类似于以下内容:

       Request URL: https://example.com?{sensitive_query_string_placeholder}       Request method: POST       Content-Type: application/json       X-SecureSourceManager-Delivery: 6546af81-25c6-46d9-aa41-70c00dc67752       X-SecureSourceManager-Event: push       X-SecureSourceManager-Signature:     

正文

     {       "secret": "",       "ref": "refs/heads/main",       "before": "f22fe95d6097bc18ba2ace7c5808ef53c0211a2e",       "after": "85c7e78e6dfb63bcad4a0bb0953c0b3554ed0e93",       "compare_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/compare/f22fe95d6097bc18ba2ace7c5808ef53c0211a2e...85c7e78e6dfb63bcad4a0bb0953c0b3554ed0e93",       "commits": [         {           "id": "85c7e78e6dfb63bcad4a0bb0953c0b3554ed0e93",           "message": "Push Event'\n",           "url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/commit/85c7e78e6dfb63bcad4a0bb0953c0b3554ed0e93",           "author": {             "name": "user",             "email": "[email protected]",             "username": "[email protected]"           },           "committer": {             "name": "user",             "email": "[email protected]",             "username": "[email protected]"           },           "verification": null,           "timestamp": "2024-07-03T18:27:38Z",           "added": [],           "removed": [],           "modified": [             "README.md"           ]         }       ],       "head_commit": null,       "repository": {         "id": 4,         "owner": {"id":2,"login":"my-project","full_name":"","email":"[email protected]","avatar_url":"b2653dbf52c7e078e04b8b20020eaadeafe0337787cc0e19b976efc8d594aefb","language":"","is_admin":false,"last_login":"1970-01-01T00:00:00Z","created":"2023-06-02T14:18:40Z","restricted":false,"username":"my-project"},         "name": "my-repo",         "full_name": "my-project/my-repo",         "description": "",         "empty": false,         "private": false,         "fork": false,         "template": false,         "parent": null,         "mirror": false,         "size": 4,         "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",         "ssh_url": "[email protected]:my-project/my-repo.git",         "clone_url": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git",         "original_url": "",         "website": "",         "stars_count": 0,         "forks_count": 0,         "watchers_count": 1,         "open_issues_count": 0,         "open_pr_counter": 1,         "release_counter": 1,         "default_branch": "main",         "archived": false,         "created_at": "2023-06-06T20:34:36Z",         "updated_at": "2024-04-04T18:19:14Z",         "permissions": {           "admin": true,           "push": true,           "pull": true         },         "has_issues": true,         "internal_tracker": {           "enable_time_tracker": false,           "allow_only_contributors_to_track_time": true,           "enable_issue_dependencies": true         },         "has_wiki": true,         "has_pull_requests": true,         "has_projects": true,         "ignore_whitespace_conflicts": false,         "allow_merge_commits": true,         "allow_rebase": true,         "allow_rebase_explicit": true,         "allow_squash_merge": true,         "avatar_url": "",         "internal": false,         "mirror_interval": "",         "uris": {           "api": "https://my-instance-123456789-api.us-central1.sourcemanager.dev/v1/projects/my-project/locations/us-central1/repositories/my-repo",           "html": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",           "git_https": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git"         }       },       "pusher": {"id":4,"login":"[email protected]","full_name":"user","email":"[email protected]","avatar_url":"https://this-is-avatar.com","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T20:53:58Z","restricted":false,"username":"[email protected]"},       "sender": {"id":4,"login":"[email protected]","full_name":"user","email":"[email protected]","avatar_url":"https://this-is-avatar.com","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T20:53:58Z","restricted":false,"username":"[email protected]"}     }    

拉取事件载荷

拉取事件载荷的内容类似于以下内容。

标题

       Request URL: https://example.com?{sensitive_query_string_placeholder}       Request method: POST       Content-Type: application/json       X-SecureSourceManager-Delivery: d7bb9273-17cf-431d-835c-b334c9702eee       X-SecureSourceManager-Event: pull_request       X-SecureSourceManager-Signature:     

正文

       {       "secret": "",       "action": "opened",       "number": 4,       "pull_request": {         "id": 18,         "url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/pulls/4",         "number": 4,         "user": {"id":4,"login":"[email protected]","full_name":"user","email":"[email protected]","avatar_url":"https://page-address.com","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T20:53:58Z","restricted":false,"username":"[email protected]"},         "title": "Open a Pull Request'",         "body": "",         "labels": [],         "milestone": null,         "assignee": null,         "assignees": null,         "state": "open",         "is_locked": false,         "comments": 0,         "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/cloud-git-test-pso-instance/test2/pulls/4",         "diff_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/pulls/4.diff",         "patch_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/pulls/4.patch",         "mergeable": false,         "merged": false,         "merged_at": null,         "merge_commit_sha": null,         "merged_by": null,         "base": {           "label": "main",           "ref": "main",           "sha": "85c7e78e6dfb63bcad4a0bb0953c0b3554ed0e93",           "repo_id": 4,           "repo": {             "id": 4,             "owner": {"id":2,"login":"my-project","full_name":"","email":"[email protected]","avatar_url":"b2653dbf52c7e078e04b8b20020eaadeafe0337787cc0e19b976efc8d594aefb","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T14:18:40Z","restricted":false,"username":"my-project"},             "name": "my-repo",             "full_name": "my-project/my-repo",             "description": "",             "empty": false,             "private": false,             "fork": false,             "template": false,             "parent": null,             "mirror": false,             "size": 4,             "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",             "ssh_url": "[email protected]:my-project/my-repo.git",             "clone_url": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git",             "original_url": "",             "website": "",             "stars_count": 0,             "forks_count": 0,             "watchers_count": 1,             "open_issues_count": 0,             "open_pr_counter": 0,             "release_counter": 1,             "default_branch": "main",             "archived": false,             "created_at": "2023-06-06T20:34:36Z",             "updated_at": "2024-07-03T18:27:42Z",             "permissions": {               "admin": false,               "push": false,               "pull": false             },             "has_issues": true,             "internal_tracker": {               "enable_time_tracker": false,               "allow_only_contributors_to_track_time": true,               "enable_issue_dependencies": true             },             "has_wiki": true,             "has_pull_requests": true,             "has_projects": true,             "ignore_whitespace_conflicts": false,             "allow_merge_commits": true,             "allow_rebase": true,             "allow_rebase_explicit": true,             "allow_squash_merge": true,             "avatar_url": "",             "internal": false,             "mirror_interval": "",             "uris": {               "api": "https://my-instance-123456789-api.us-central1.sourcemanager.dev/v1/projects/my-project/locations/us-central1/repositories/my-repo",               "html": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",               "git_https": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git"             }           }         },         "head": {           "label": "dev",           "ref": "dev",           "sha": "06aa2c971d8e06e5271ce04248ef1920341ce208",           "repo_id": 4,           "repo": {             "id": 4,             "owner": {"id":2,"login":"my-project","full_name":"","email":"[email protected]","avatar_url":"b2653dbf52c7e078e04b8b20020eaadeafe0337787cc0e19b976efc8d594aefb","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T14:18:40Z","restricted":false,"username":"my-project"},             "name": "my-repo",             "full_name": "my-project/my-repo",             "description": "",             "empty": false,             "private": false,             "fork": false,             "template": false,             "parent": null,             "mirror": false,             "size": 4,             "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",             "ssh_url": "[email protected]:my-project/my-repo.git",             "clone_url": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git",             "original_url": "",             "website": "",             "stars_count": 0,             "forks_count": 0,             "watchers_count": 1,             "open_issues_count": 0,             "open_pr_counter": 0,             "release_counter": 1,             "default_branch": "main",             "archived": false,             "created_at": "2023-06-06T20:34:36Z",             "updated_at": "2024-07-03T18:27:42Z",             "permissions": {               "admin": false,               "push": false,               "pull": false             },             "has_issues": true,             "internal_tracker": {               "enable_time_tracker": false,               "allow_only_contributors_to_track_time": true,               "enable_issue_dependencies": true             },             "has_wiki": true,             "has_pull_requests": true,             "has_projects": true,             "ignore_whitespace_conflicts": false,             "allow_merge_commits": true,             "allow_rebase": true,             "allow_rebase_explicit": true,             "allow_squash_merge": true,             "avatar_url": "",             "internal": false,             "mirror_interval": "",             "uris": {               "api": "https://my-instance-123456789-api.us-central1.sourcemanager.dev/v1/projects/my-project/locations/us-central1/repositories/my-repo",               "html": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",               "git_https": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git"             }           }         },         "merge_base": "af065efa8d3d7549154c560da5cb3ec236ad3002",         "due_date": null,         "created_at": "2024-07-03T18:40:21Z",         "updated_at": "2024-07-03T18:40:21Z",         "closed_at": null       },       "repository": {         "id": 4,         "owner": {"id":2,"login":"my-project","full_name":"","email":"[email protected]","avatar_url":"b2653dbf52c7e078e04b8b20020eaadeafe0337787cc0e19b976efc8d594aefb","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T14:18:40Z","restricted":false,"username":"my-project"},         "name": "my-repo",         "full_name": "my-project/my-repo",         "description": "",         "empty": false,         "private": false,         "fork": false,         "template": false,         "parent": null,         "mirror": false,         "size": 4,         "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",         "ssh_url": "[email protected]:my-project/my-repo.git",         "clone_url": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git",         "original_url": "",         "website": "",         "stars_count": 0,         "forks_count": 0,         "watchers_count": 1,         "open_issues_count": 0,         "open_pr_counter": 1,         "release_counter": 1,         "default_branch": "main",         "archived": false,         "created_at": "2023-06-06T20:34:36Z",         "updated_at": "2024-07-03T18:27:42Z",         "permissions": {           "admin": false,           "push": false,           "pull": true         },         "has_issues": true,         "internal_tracker": {           "enable_time_tracker": false,           "allow_only_contributors_to_track_time": true,           "enable_issue_dependencies": true         },         "has_wiki": true,         "has_pull_requests": true,         "has_projects": true,         "ignore_whitespace_conflicts": false,         "allow_merge_commits": true,         "allow_rebase": true,         "allow_rebase_explicit": true,         "allow_squash_merge": true,         "avatar_url": "",         "internal": false,         "mirror_interval": "",         "uris": {           "api": "https://my-instance-123456789-api.us-central1.sourcemanager.dev/v1/projects/my-project/locations/us-central1/repositories/my-repo",           "html": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",           "git_https": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git"         }       },       "sender": {"id":4,"login":"[email protected]","full_name":"user","email":"[email protected]","avatar_url":"https://this-is-avatar.com","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T20:53:58Z","restricted":false,"username":"[email protected]"},       "review": null     }     

后续步骤