Webhooks – Übersicht

Auf dieser Seite werden Secure Source Manager-Webhooks beschrieben. Folgen Sie der Anleitung unter Webhooks einrichten, um einen Webhook einzurichten.

Webhooks sind HTTP-Anfragen, die durch ein Ereignis in einem Secure Source Manager-Repository ausgelöst und dann an eine vom Nutzer angegebene URL gesendet werden.

Webhook-Einstellungen

Webhooks können nur in der Secure Source Manager-Weboberfläche konfiguriert werden. Die folgenden Felder sind konfigurierbar:

Hook-ID
Für Menschen lesbarer Name für den Webhook. Hook-IDs müssen der Namenskonvention für Ressourcen entsprechen. Sie dürfen nur Kleinbuchstaben, Zahlen oder Bindestriche enthalten, müssen mit einem Buchstaben beginnen und können nach dem Erstellen des Webhooks nicht mehr geändert werden.
Ziel-URL
Webhook-Ziel-URL. Ein Webhook-Ziel ist eine offene und öffentliche URL.
Vertraulicher Abfragestring

Vertrauliche Abfragestrings werden im Format TARGET_URL?SENSITIVE_QUERY_STRING an das Ende der Ziel-URL angehängt.

Die meisten Dienste stellen ein Token oder ein Secret zur Verfügung, um sicherzustellen, dass die eingehenden Anfragen von einem autorisierten Dienst stammen. Um die Anfrage zu überprüfen, können Sie das erforderliche Token oder Secret im vertraulichen Abfragestring speichern.

Basis für Trigger

Ereignis zum Auslösen der Webhook-Anfrage. Als Optionen stehen Push zum Auslösen bei einem Push in das Repository oder Pull-Anfrage-Status geändert zum Auslösen bei einer geöffneten, geschlossenen, wieder geöffneten oder bearbeiteten Pull-Anfrage zur Verfügung.

Git-Referenzfilter für Push-Ereignisse

Ein Filter, um anzugeben, über welche Branches für Push-Ereignisse als Glob-Muster berichtet werden soll. Die Syntax finden Sie in der Glob-Dokumentation.

Aktiv

Wenn diese Option ausgewählt ist, sendet der Webhook bei Triggerereignissen Anfragen. Wenn die Option nicht ausgewählt ist, werden keine Anfragen gesendet.

Webhooks testen

Nachdem Sie Ihren Webhook konfiguriert haben, können Sie ihn auf dem Tab „Webhooks“ mit der Schaltfläche Zustellung testen testen.

Beispiele für Ereignisinformationen

Die folgenden Beispiele zeigen die Ereignisinformationen, die von Secure Source Manager für verschiedene Webhook-Ereignisse an die Ziel-URL gesendet werden.

Nutzlast des Push-Ereignisses

Der Inhalt einer Nutzlast eines Push-Ereignisses sieht in etwa so aus:

      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:
    

Text

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

Nutzlast des Pull-Ereignisses

Der Inhalt einer Nutzlast eines Pull-Ereignisses sieht in etwa so aus:

Header

      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:
    

Text

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

Nutzlast des Ereignisses „Pull-Anfrage-Kommentar“

Der Inhalt einer Nutzlast eines Ereignisses „Pull-Anfrage-Kommentar“ sieht in etwa so aus:

Header

      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:
    

Text

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

Nächste Schritte