이 페이지에서는 Secure Source Manager 웹훅을 설명합니다. 웹훅을 설정하려면 웹훅 설정의 안내를 따르세요.
웹훅은 Secure Source Manager 저장소의 이벤트에 의해 트리거된 후 사용자 지정 URL로 전송되는 HTTP 요청입니다.
웹훅 설정
웹훅은 Secure Source Manager 웹 인터페이스에서만 구성할 수 있습니다. 다음 필드는 구성할 수 있습니다.
- 후크 ID
- 사람이 읽을 수 있는 웹훅 이름입니다. 후크 ID는 리소스 이름 지정 규칙을 따라야 합니다. 소문자, 숫자 또는 대시만 포함해야 하며 문자로 시작해야 하고 웹훅을 만든 후에는 변경할 수 없습니다.
- 대상 URL
- 웹훅 타겟 URL입니다. 웹훅 대상은 공개 URL입니다.
- 민감한 쿼리 문자열
민감한 쿼리 문자열은
TARGET_URL?SENSITIVE_QUERY_STRING
형식으로 타겟 URL 끝에 추가됩니다.대부분의 서비스는 수신 요청이 승인된 서비스에서부터 시작되는지 확인하기 위해 토큰 또는 보안 비밀을 제공합니다. 요청을 확인하려면 필요한 토큰이나 보안 비밀을 민감한 쿼리 문자열에 저장하면 됩니다.
- 트리거 기준
웹훅 요청을 트리거하는 이벤트입니다. 옵션은 저장소에 푸시할 때 트리거되는 푸시 또는 풀 요청이 열리거나, 닫히거나, 다시 열리거나, 수정될 때 트리거되는 풀 요청 상태가 변경됨입니다.
- 푸시 이벤트의 Git 참조 필터
glob 패턴으로 지정된 푸시 이벤트에 대해 보고할 브랜치를 지정하는 필터입니다. 구문은 glob 문서를 참고하세요.
- 활성
웹훅은 선택한 경우 트리거 이벤트에 대한 요청을 전송합니다. 선택하지 않으면 요청이 전송되지 않습니다.
웹훅 테스트
웹훅을 구성한 후 웹훅 탭의 전송 테스트 버튼을 사용하여 웹훅을 테스트할 수 있습니다.
이벤트 정보 예
다음 예는 다양한 웹훅 이벤트에 대해 Secure Source Manager에서 타겟 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"} }
이벤트 페이로드 가져오기
풀 이벤트 페이로드의 콘텐츠는 다음과 유사합니다.
헤더
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 }
다음 단계
- 웹훅을 사용하여 Jenkins에 연결합니다.
- 웹훅 설정