このページでは、Secure Source Manager の Webhook について説明します。webhook を設定するには、webhook を設定するの手順に沿って操作します。
Webhook は、Secure Source Manager リポジトリのイベントによってトリガーされ、ユーザーが指定した URL に送信される HTTP リクエストです。
Webhook の設定
Webhook は、Secure Source Manager ウェブ インターフェースでのみ構成できます。次のフィールドを構成できます。
- フック ID
- 人が読める形式の Webhook 名。フック ID は、リソースの命名規則に従う必要があります。小文字、数字、ダッシュのみを使用する必要があります。先頭は英字にする必要があり、Webhook の作成後に変更することはできません。
- ターゲット URL
- Webhook ターゲット URL。Webhook ターゲットはオープンな公開 URL です。
- 機密性の高いクエリ文字列
機密性の高いクエリ文字列は、
TARGET_URL?SENSITIVE_QUERY_STRING形式でターゲット URL の末尾に追加されます。ほとんどのサービスは、受信リクエストが承認済みのサービスからのものであることを確認するためにトークンまたはシークレットを提供します。リクエストを検証するために、必要なトークンまたはシークレットを機密性の高いクエリ文字列に保存できます。
- トリガー対象
Webhook リクエストをトリガーするイベント。オプションは、リポジトリへの push でトリガーする Push と、pull リクエストのオープン、クローズ、再オープン、編集でトリガーする Pull request state changed です。
- push イベントの Git 参照フィルタ
glob パターンとして指定された push イベントについてレポートするブランチを指定するフィルタ。構文については、glob のドキュメントをご覧ください。
- 有効
Webhook は、選択されたときにトリガー イベントでリクエストを送信します。選択されていない場合、リクエストは送信されません。
Webhook をテストする
Webhook を構成したら、Webhook タブの [Test Delivery] ボタンを使用して Webhook をテストできます。
イベント情報の例
次の例は、Secure Source Manager がさまざまな Webhook イベントのターゲット URL に送信するイベント情報を示しています。
プッシュ イベント ペイロード
プッシュ イベント ペイロードの内容は次のようになります。
ヘッダー
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": "user@example.com",
"username": "user@example.com"
},
"committer": {
"name": "user",
"email": "user@example.com",
"username": "user@example.com"
},
"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-address@example.com","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": "git@my-instance-123456789-ssh.us-central1.sourcemanager.dev: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":"user@example.com","full_name":"user","email":"user@example.com","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":"user@example.com"},
"sender": {"id":4,"login":"user@example.com","full_name":"user","email":"user@example.com","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":"user@example.com"}
}
プル イベント ペイロード
pull イベントのペイロードの内容は次のようになります。
ヘッダー
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":"user@example.com","full_name":"user","email":"user@example.com","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":"user@example.com"},
"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-address@example.com","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": "git@my-instance-123456789-ssh.us-central1.sourcemanager.dev: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-address@example.com","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": "git@my-instance-123456789-ssh.us-central1.sourcemanager.dev: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-address@example.com","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": "git@my-instance-123456789-ssh.us-central1.sourcemanager.dev: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":"user@example.com","full_name":"user","email":"user@example.com","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":"user@example.com"},
"review": null
}
次のステップ
- Webhook を使用して Jenkins に接続します。
- Webhook を設定する。