סקירה כללית של תגובות לפעולות מאתרים אחרים (webhooks)

בדף הזה מתוארים ווּבְּהוּקים של Secure Source Manager. כדי להגדיר תגובה לפעולה מאתר אחר (webhook), פועלים לפי ההוראות במאמר הגדרת תגובות לפעולות מאתר אחר (webhook).

‫Webhooks הן בקשות HTTP שמופעלות על ידי אירוע במאגר Secure Source Manager, ואז נשלחות לכתובת URL שהמשתמש מציין.

הגדרות של תגובות לפעולות מאתרים אחרים (web

אפשר להגדיר webhooks רק בממשק האינטרנט של Secure Source Manager. אפשר להגדיר את השדות הבאים:

מזהה ה-Hook
שם קריא של התגובה לפעולה מאתר אחר (webhook). מזהי ה-Hook צריכים להיות בהתאם למוסכמת מתן השמות של משאבים. הם צריכים לכלול רק אותיות קטנות, מספרים או מקפים, להתחיל באות ולא ניתן לשנות אותם אחרי יצירת ה-webhook.
כתובת URL של יעד
כתובת ה-URL של יעד ה-webhook. יעד של webhook הוא כתובת URL פתוחה וציבורית.
מחרוזת שאילתה עם תוכן רגיש

מחרוזות שאילתה רגישות מצורפות לסוף כתובת היעד בפורמט TARGET_URL?SENSITIVE_QUERY_STRING.

רוב השירותים מספקים אסימון או סוד כדי לוודא שהבקשות הנכנסות מגיעות משירות מורשה. כדי לאמת את הבקשה, אפשר לאחסן את הטוקן או הסוד הנדרשים במחרוזת השאילתה הרגישה.

הטריגר מופעל

האירוע שיפעיל את בקשת ה-webhook. האפשרויות הן Push כדי להפעיל את הפעולה כשמתבצעת פעולת push למאגר, או Pull request state changed כדי להפעיל את הפעולה כשבקשת משיכה נפתחת, נסגרת, נפתחת מחדש או נערכת.

מסנן הפניות (refs) ב-Git לאירועי push

מסנן שמציין אילו ענפים לכלול בדוחות לגבי אירועי דחיפה שמוגדרים כתבנית glob. מידע על התחביר מופיע במאמר בנושא glob.

פעיל

ה-webhook שולח בקשות באירועי טריגר כשבוחרים באפשרות הזו. אם לא מסמנים את התיבה, לא נשלחות בקשות.

בדיקת webhooks

אחרי שמגדירים את ה-webhook, אפשר לבדוק אותו באמצעות הלחצן Test Delivery (בדיקת מסירה) בכרטיסייה webhooks (וווב-הוקים).

דוגמאות לפרטי אירועים

בדוגמאות הבאות מוצג מידע על אירועים שנשלח על ידי Secure Source Manager לכתובת ה-URL של היעד עבור אירועי webhook שונים.

המטען הייעודי של אירוע push

תוכן המטען הייעודי (payload) של אירוע push דומה לתוכן הבא:

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

שליפת המטען הייעודי של האירוע

תוכן המטען הייעודי (payload) של אירוע משיכה דומה לתוכן הבא.

כותרת

      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
    }
    

המטען הייעודי של אירוע תגובה לבקשת מיזוג

תוכן המטען הייעודי (payload) של אירוע תגובה לבקשת משיכה דומה לזה שמופיע בהמשך:

כותרת

      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_comment
      X-SecureSourceManager-Signature:
    

גוף

    {
      "secret": "",
      "action": "created",
      "issue": {
        "id": 18,
        "url": "https://my-instance-123456789-api.us-central1.sourcemanager.dev/v1/projects/my-project/locations/us-central1/repositories/my-repo/issues/4",
        "html_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"},
        "original_author": "",
        "original_author_id": 0,
        "title": "Open a Pull Request'",
        "body": "This is the description of the pull request.",
        "ref": "",
        "labels": [],
        "milestone": null,
        "assignee": null,
        "assignees": null,
        "state": "open",
        "is_locked": false,
        "comments": 1,
        "created_at": "2024-07-03T18:40:21Z",
        "updated_at": "2024-07-03T18:40:21Z",
        "closed_at": null,
        "due_date": null,
        "pull_request": {
          "merged": false,
          "merged_at": null
        },
        "repository": {
          "id": 4,
          "name": "my-repo",
          "owner": "my-project",
          "full_name": "my-project/my-repo"
        },
        "etag": "PSIsycnIx2xBaS1CtNRhB0qY-NCtxuHIeYlo8H12E1Q"
      },
      "comment": {
        "id": 1,
        "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/pulls/4#issuecomment-1",
        "pull_request_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/pulls/4",
        "issue_url": "",
        "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"},
        "original_author": "",
        "original_author_id": 0,
        "body": "this is a comment",
        "created_at": "2024-07-03T18:40:21Z",
        "updated_at": "2024-07-03T18:40:21Z"
      },
      "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"},
      "is_pull": true
    }
    

המאמרים הבאים