System hooks

原文:https://docs.gitlab.com/ee/system_hooks/system_hooks.html

System hooks

您的 GitLab 实例可以对以下事件执行 HTTP POST 请求:

  • project_create
  • project_destroy
  • project_rename
  • project_transfer
  • project_update
  • user_add_to_team
  • user_remove_from_team
  • user_update_for_team
  • user_create
  • user_destroy
  • user_failed_login
  • user_rename
  • key_create
  • key_destroy
  • group_create
  • group_destroy
  • group_rename
  • user_add_to_group
  • user_remove_from_group
  • user_update_for_group

这些触发器中的大多数触发器是不言自明的,但是应该澄清一下project_updateproject_renameproject_update项目的属性(名称,描述,标签等)发生更改,就会随时触发project_update除非 path属性也发生更改. 在这种情况下,将触发project_rename (例如,如果您只关心存储库 URL,则可以只监听project_rename ).

每当被阻止的用户尝试登录并拒绝访问时,都会发送user_failed_login .

可以使用系统挂钩,例如,用于在 LDAP 服务器中记录或更改信息.

注意:对于 Push 和 Tag 事件,我们采用与Webhooks相同的结构和弃用方式,但是我们从不显示提交.

Hooks request example

请求标头:

  1. X-Gitlab-Event: System Hook

创建的项目:

  1. { "created_at": "2012-07-21T07:30:54Z", "updated_at": "2012-07-21T07:38:22Z", "event_name": "project_create", "name": "StoreCloud", "owner_email": "johnsmith@gmail.com", "owner_name": "John Smith", "path": "storecloud", "path_with_namespace": "jsmith/storecloud", "project_id": 74, "project_visibility": "private" }

项目已销毁:

  1. { "created_at": "2012-07-21T07:30:58Z", "updated_at": "2012-07-21T07:38:22Z", "event_name": "project_destroy", "name": "Underscore", "owner_email": "johnsmith@gmail.com", "owner_name": "John Smith", "path": "underscore", "path_with_namespace": "jsmith/underscore", "project_id": 73, "project_visibility": "internal" }

项目更名:

  1. { "created_at": "2012-07-21T07:30:58Z", "updated_at": "2012-07-21T07:38:22Z", "event_name": "project_rename", "name": "Underscore", "path": "underscore", "path_with_namespace": "jsmith/underscore", "project_id": 73, "owner_name": "John Smith", "owner_email": "johnsmith@gmail.com", "project_visibility": "internal", "old_path_with_namespace": "jsmith/overscore" }

请注意,如果命名空间发生更改,则不会触发project_rename . 在这种情况下,请参考group_renameuser_rename .

项目转移:

  1. { "created_at": "2012-07-21T07:30:58Z", "updated_at": "2012-07-21T07:38:22Z", "event_name": "project_transfer", "name": "Underscore", "path": "underscore", "path_with_namespace": "scores/underscore", "project_id": 73, "owner_name": "John Smith", "owner_email": "johnsmith@gmail.com", "project_visibility": "internal", "old_path_with_namespace": "jsmith/overscore" }

项目已更新:

  1. { "created_at": "2012-07-21T07:30:54Z", "updated_at": "2012-07-21T07:38:22Z", "event_name": "project_update", "name": "StoreCloud", "owner_email": "johnsmith@gmail.com", "owner_name": "John Smith", "path": "storecloud", "path_with_namespace": "jsmith/storecloud", "project_id": 74, "project_visibility": "private" }

新团队成员:

  1. { "created_at": "2012-07-21T07:30:56Z", "updated_at": "2012-07-21T07:38:22Z", "event_name": "user_add_to_team", "access_level": "Maintainer", "project_id": 74, "project_name": "StoreCloud", "project_path": "storecloud", "project_path_with_namespace": "jsmith/storecloud", "user_email": "johnsmith@gmail.com", "user_name": "John Smith", "user_username": "johnsmith", "user_id": 41, "project_visibility": "visibilitylevel|private" }

团队成员已删除:

  1. { "created_at": "2012-07-21T07:30:56Z", "updated_at": "2012-07-21T07:38:22Z", "event_name": "user_remove_from_team", "access_level": "Maintainer", "project_id": 74, "project_name": "StoreCloud", "project_path": "storecloud", "project_path_with_namespace": "jsmith/storecloud", "user_email": "johnsmith@gmail.com", "user_name": "John Smith", "user_username": "johnsmith", "user_id": 41, "project_visibility": "visibilitylevel|private" }

团队成员已更新:

  1. { "created_at": "2012-07-21T07:30:56Z", "updated_at": "2012-07-21T07:38:22Z", "event_name": "user_update_for_team", "access_level": "Maintainer", "project_id": 74, "project_name": "StoreCloud", "project_path": "storecloud", "project_path_with_namespace": "jsmith/storecloud", "user_email": "johnsmith@gmail.com", "user_name": "John Smith", "user_username": "johnsmith", "user_id": 41, "project_visibility": "visibilitylevel|private" }

用户创建:

  1. { "created_at": "2012-07-21T07:44:07Z", "updated_at": "2012-07-21T07:38:22Z", "email": "js@gitlabhq.com", "event_name": "user_create", "name": "John Smith", "username": "js", "user_id": 41 }

用户已删除:

  1. { "created_at": "2012-07-21T07:44:07Z", "updated_at": "2012-07-21T07:38:22Z", "email": "js@gitlabhq.com", "event_name": "user_destroy", "name": "John Smith", "username": "js", "user_id": 41 }

用户登录失败:

  1. { "event_name": "user_failed_login", "created_at": "2017-10-03T06:08:48Z", "updated_at": "2018-01-15T04:52:06Z", "name": "John Smith", "email": "user4@example.com", "user_id": 26, "username": "user4", "state": "blocked" }

如果通过 LDAP 阻止了用户,则state将为ldap_blocked .

用户重命名:

  1. { "event_name": "user_rename", "created_at": "2017-11-01T11:21:04Z", "updated_at": "2017-11-01T14:04:47Z", "name": "new-name", "email": "best-email@example.tld", "user_id": 58, "username": "new-exciting-name", "old_username": "old-boring-name" }

密钥已添加

  1. { "event_name": "key_create", "created_at": "2014-08-18 18:45:16 UTC", "updated_at": "2012-07-21T07:38:22Z", "username": "root", "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC58FwqHUbebw2SdT7SP4FxZ0w+lAO/erhy2ylhlcW/tZ3GY3mBu9VeeiSGoGz8hCx80Zrz+aQv28xfFfKlC8XQFpCWwsnWnQqO2Lv9bS8V1fIHgMxOHIt5Vs+9CAWGCCvUOAurjsUDoE2ALIXLDMKnJxcxD13XjWdK54j6ZXDB4syLF0C2PnAQSVY9X7MfCYwtuFmhQhKaBussAXpaVMRHltie3UYSBUUuZaB3J4cg/7TxlmxcNd+ppPRIpSZAB0NI6aOnqoBCpimscO/VpQRJMVLr3XiSYeT6HBiDXWHnIVPfQc03OGcaFqOit6p8lYKMaP/iUQLm+pgpZqrXZ9vB john@localhost", "id": 4 }

密钥已删除

  1. { "event_name": "key_destroy", "created_at": "2014-08-18 18:45:16 UTC", "updated_at": "2012-07-21T07:38:22Z", "username": "root", "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC58FwqHUbebw2SdT7SP4FxZ0w+lAO/erhy2ylhlcW/tZ3GY3mBu9VeeiSGoGz8hCx80Zrz+aQv28xfFfKlC8XQFpCWwsnWnQqO2Lv9bS8V1fIHgMxOHIt5Vs+9CAWGCCvUOAurjsUDoE2ALIXLDMKnJxcxD13XjWdK54j6ZXDB4syLF0C2PnAQSVY9X7MfCYwtuFmhQhKaBussAXpaVMRHltie3UYSBUUuZaB3J4cg/7TxlmxcNd+ppPRIpSZAB0NI6aOnqoBCpimscO/VpQRJMVLr3XiSYeT6HBiDXWHnIVPfQc03OGcaFqOit6p8lYKMaP/iUQLm+pgpZqrXZ9vB john@localhost", "id": 4 }

组创建:

  1. { "created_at": "2012-07-21T07:30:54Z", "updated_at": "2012-07-21T07:38:22Z", "event_name": "group_create", "name": "StoreCloud", "owner_email": null, "owner_name": null, "path": "storecloud", "group_id": 78 }

owner_nameowner_email始终为null . 请参阅https://gitlab.com/gitlab-org/gitlab/-/issues/20011 .

组已删除:

  1. { "created_at": "2012-07-21T07:30:54Z", "updated_at": "2012-07-21T07:38:22Z", "event_name": "group_destroy", "name": "StoreCloud", "owner_email": null, "owner_name": null, "path": "storecloud", "group_id": 78 }

owner_nameowner_email始终为null . 请参阅问题#20011 .

组重命名:

  1. { "event_name": "group_rename", "created_at": "2017-10-30T15:09:00Z", "updated_at": "2017-11-01T10:23:52Z", "name": "Better Name", "path": "better-name", "full_path": "parent-group/better-name", "group_id": 64, "owner_name": null, "owner_email": null, "old_path": "old-name", "old_full_path": "parent-group/old-name" }

owner_nameowner_email始终为null . 请参阅https://gitlab.com/gitlab-org/gitlab/-/issues/20011 .

新组成员:

  1. { "created_at": "2012-07-21T07:30:56Z", "updated_at": "2012-07-21T07:38:22Z", "event_name": "user_add_to_group", "group_access": "Maintainer", "group_id": 78, "group_name": "StoreCloud", "group_path": "storecloud", "user_email": "johnsmith@gmail.com", "user_name": "John Smith", "user_username": "johnsmith", "user_id": 41 }

组成员已删除:

  1. { "created_at": "2012-07-21T07:30:56Z", "updated_at": "2012-07-21T07:38:22Z", "event_name": "user_remove_from_group", "group_access": "Maintainer", "group_id": 78, "group_name": "StoreCloud", "group_path": "storecloud", "user_email": "johnsmith@gmail.com", "user_name": "John Smith", "user_username": "johnsmith", "user_id": 41 }

小组成员已更新:

  1. { "created_at": "2012-07-21T07:30:56Z", "updated_at": "2012-07-21T07:38:22Z", "event_name": "user_update_for_group", "group_access": "Maintainer", "group_id": 78, "group_name": "StoreCloud", "group_path": "storecloud", "user_email": "johnsmith@gmail.com", "user_name": "John Smith", "user_username": "johnsmith", "user_id": 41 }

Push events

当您推送到存储库时(在推送标签时除外)触发. 它为每个修改的分支生成一个事件.

请求标头:

  1. X-Gitlab-Event: System Hook

要求正文:

  1. { "event_name": "push", "before": "95790bf891e76fee5e1747ab589903a6a1f80f22", "after": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", "ref": "refs/heads/master", "checkout_sha": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", "user_id": 4, "user_name": "John Smith", "user_email": "john@example.com", "user_avatar": "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80", "project_id": 15, "project":{ "name":"Diaspora", "description":"", "web_url":"http://example.com/mike/diaspora", "avatar_url":null, "git_ssh_url":"git@example.com:mike/diaspora.git", "git_http_url":"http://example.com/mike/diaspora.git", "namespace":"Mike", "visibility_level":0, "path_with_namespace":"mike/diaspora", "default_branch":"master", "homepage":"http://example.com/mike/diaspora", "url":"git@example.com:mike/diaspora.git", "ssh_url":"git@example.com:mike/diaspora.git", "http_url":"http://example.com/mike/diaspora.git" }, "repository":{ "name": "Diaspora", "url": "git@example.com:mike/diaspora.git", "description": "", "homepage": "http://example.com/mike/diaspora", "git_http_url":"http://example.com/mike/diaspora.git", "git_ssh_url":"git@example.com:mike/diaspora.git", "visibility_level":0 }, "commits": [ { "id": "c5feabde2d8cd023215af4d2ceeb7a64839fc428", "message": "Add simple search to projects in public area", "timestamp": "2013-05-13T18:18:08+00:00", "url": "https://dev.gitlab.org/gitlab/gitlabhq/commit/c5feabde2d8cd023215af4d2ceeb7a64839fc428", "author": { "name": "Example User", "email": "user@example.com" } } ], "total_commits_count": 1 }

Tag events

在创建(或删除)存储库标签时触发. 每个修改后的标签会生成一个事件.

请求标头:

  1. X-Gitlab-Event: System Hook

要求正文:

  1. { "event_name": "tag_push", "before": "0000000000000000000000000000000000000000", "after": "82b3d5ae55f7080f1e6022629cdb57bfae7cccc7", "ref": "refs/tags/v1.0.0", "checkout_sha": "5937ac0a7beb003549fc5fd26fc247adbce4a52e", "user_id": 1, "user_name": "John Smith", "user_avatar": "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80", "project_id": 1, "project":{ "name":"Example", "description":"", "web_url":"http://example.com/jsmith/example", "avatar_url":null, "git_ssh_url":"git@example.com:jsmith/example.git", "git_http_url":"http://example.com/jsmith/example.git", "namespace":"Jsmith", "visibility_level":0, "path_with_namespace":"jsmith/example", "default_branch":"master", "homepage":"http://example.com/jsmith/example", "url":"git@example.com:jsmith/example.git", "ssh_url":"git@example.com:jsmith/example.git", "http_url":"http://example.com/jsmith/example.git" }, "repository":{ "name": "Example", "url": "ssh://git@example.com/jsmith/example.git", "description": "", "homepage": "http://example.com/jsmith/example", "git_http_url":"http://example.com/jsmith/example.git", "git_ssh_url":"git@example.com:jsmith/example.git", "visibility_level":0 }, "commits": [], "total_commits_count": 0 }

Merge request events

在创建新的合并请求,更新/合并/关闭现有合并请求或在源分支中添加提交时触发.

请求标头:

  1. X-Gitlab-Event: System Hook
  1. { "object_kind": "merge_request", "user": { "name": "Administrator", "username": "root", "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon" }, "project": { "name": "Example", "description": "", "web_url": "http://example.com/jsmith/example", "avatar_url": null, "git_ssh_url": "git@example.com:jsmith/example.git", "git_http_url": "http://example.com/jsmith/example.git", "namespace": "Jsmith", "visibility_level": 0, "path_with_namespace": "jsmith/example", "default_branch": "master", "ci_config_path": "", "homepage": "http://example.com/jsmith/example", "url": "git@example.com:jsmith/example.git", "ssh_url": "git@example.com:jsmith/example.git", "http_url": "http://example.com/jsmith/example.git" }, "object_attributes": { "id": 90, "target_branch": "master", "source_branch": "ms-viewport", "source_project_id": 14, "author_id": 51, "assignee_id": 6, "title": "MS-Viewport", "created_at": "2017-09-20T08:31:45.944Z", "updated_at": "2017-09-28T12:23:42.365Z", "milestone_id": null, "state": "opened", "merge_status": "unchecked", "target_project_id": 14, "iid": 1, "description": "", "updated_by_id": 1, "merge_error": null, "merge_params": { "force_remove_source_branch": "0" }, "merge_when_pipeline_succeeds": false, "merge_user_id": null, "merge_commit_sha": null, "deleted_at": null, "in_progress_merge_commit_sha": null, "lock_version": 5, "time_estimate": 0, "last_edited_at": "2017-09-27T12:43:37.558Z", "last_edited_by_id": 1, "head_pipeline_id": 61, "ref_fetched": true, "merge_jid": null, "source": { "name": "Awesome Project", "description": "", "web_url": "http://example.com/awesome_space/awesome_project", "avatar_url": null, "git_ssh_url": "git@example.com:awesome_space/awesome_project.git", "git_http_url": "http://example.com/awesome_space/awesome_project.git", "namespace": "root", "visibility_level": 0, "path_with_namespace": "awesome_space/awesome_project", "default_branch": "master", "ci_config_path": "", "homepage": "http://example.com/awesome_space/awesome_project", "url": "http://example.com/awesome_space/awesome_project.git", "ssh_url": "git@example.com:awesome_space/awesome_project.git", "http_url": "http://example.com/awesome_space/awesome_project.git" }, "target": { "name": "Awesome Project", "description": "Aut reprehenderit ut est.", "web_url": "http://example.com/awesome_space/awesome_project", "avatar_url": null, "git_ssh_url": "git@example.com:awesome_space/awesome_project.git", "git_http_url": "http://example.com/awesome_space/awesome_project.git", "namespace": "Awesome Space", "visibility_level": 0, "path_with_namespace": "awesome_space/awesome_project", "default_branch": "master", "ci_config_path": "", "homepage": "http://example.com/awesome_space/awesome_project", "url": "http://example.com/awesome_space/awesome_project.git", "ssh_url": "git@example.com:awesome_space/awesome_project.git", "http_url": "http://example.com/awesome_space/awesome_project.git" }, "last_commit": { "id": "ba3e0d8ff79c80d5b0bbb4f3e2e343e0aaa662b7", "message": "fixed readme", "timestamp": "2017-09-26T16:12:57Z", "url": "http://example.com/awesome_space/awesome_project/commits/da1560886d4f094c3e6c9ef40349f7d38b5d27d7", "author": { "name": "GitLab dev user", "email": "gitlabdev@dv6700.(none)" } }, "work_in_progress": false, "total_time_spent": 0, "human_total_time_spent": null, "human_time_estimate": null }, "labels": null, "repository": { "name": "git-gpg-test", "url": "git@example.com:awesome_space/awesome_project.git", "description": "", "homepage": "http://example.com/awesome_space/awesome_project" } }

Repository Update events

当您推送到存储库(包括标签)时仅触发一次.

Request header:

  1. X-Gitlab-Event: System Hook

要求正文:

  1. { "event_name": "repository_update", "user_id": 1, "user_name": "John Smith", "user_email": "admin@example.com", "user_avatar": "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80", "project_id": 1, "project": { "name":"Example", "description":"", "web_url":"http://example.com/jsmith/example", "avatar_url":null, "git_ssh_url":"git@example.com:jsmith/example.git", "git_http_url":"http://example.com/jsmith/example.git", "namespace":"Jsmith", "visibility_level":0, "path_with_namespace":"jsmith/example", "default_branch":"master", "homepage":"http://example.com/jsmith/example", "url":"git@example.com:jsmith/example.git", "ssh_url":"git@example.com:jsmith/example.git", "http_url":"http://example.com/jsmith/example.git", }, "changes": [ { "before":"8205ea8d81ce0c6b90fbe8280d118cc9fdad6130", "after":"4045ea7a3df38697b3730a20fb73c8bed8a3e69e", "ref":"refs/heads/master" } ], "refs":["refs/heads/master"] }

Local requests in system hooks

管理员可以允许或阻止通过系统挂钩对本地网络的请求 .