为组中的所有项目添加GitLab Web挂钩

时间:2015-06-25 11:15:51

标签: gitlab webhooks

我希望GitLab组中的所有项目都能为webhook共享配置:

{{1}}

GitLab webhook documentation表明它应该是可能的:

  

如果您在一个组中有大量项目,那么您可以方便地为整个组配置全局Web挂钩。您可以在组设置页面上添加组级别Web挂钩。

虽然我在gitlab 7.0.0中的组设置页面上看不到这样的内容,但这听起来和我的完全一样。我无法确定此功能是否比changelog中的功能更新。

该功能是否存在?我该如何使用它?

3 个答案:

答案 0 :(得分:4)

仅限企业版:

  

GitLab企业版中,您可以为整个组全局配置Web挂钩。您可以在组设置页面设​​置>上添加组级别Web挂钩。 Web Hooks。

答案 1 :(得分:0)

跟随@VertigoRay的评论,以下是使用GitLab CE API进行此操作的过程:

在GitLab中拥有或创建用户以及具有api范围的个人访问令牌:

  • 用户(右上角的头像)>设置(菜单)>访问令牌(侧边栏)
  • 检查api范围(复选框)
  • 点击创建个人访问令牌(按钮)
  • 您的新个人访问令牌(文本字段)中的值

执行HTTP请求以获取所有项目:

GET https://gitlab.example.com/api/v4/projects
Private-Token: <my_personal_token>
Accept: application/json

对于响应中的每个项目:

  • id 是要在下一个请求URL中使用的
  • 转换 ssh_url_to_repo 的值,使其成为URL编码的
    • 示例:ssh://git@example.com:1234/group/alpha.git成为ssh%3A%2F%2Fgit%40example.com%3A1234%2Fgroup%2Falpha.git

对于每个项目,执行一个HTTP请求以创建一个钩子:

POST https://gitlab.example.com/api/v4/projects/<project_ID>/hooks
Private-Token: <my_personal_token>
Content-Type: application/json

{
  "url": "https://jenkins.example.com/git/notifyCommit?url=<encoded_ssh_url>",
  "enable_ssl_verification": true
}

这应该用您选择的语言编写。

答案 2 :(得分:0)

不适合作为持久解决方案,但是这对于寻求一次性更改(来自raketasks documentation的人)可能有用:

Add a webhook for projects in a given NAMESPACE
# omnibus-gitlab
sudo gitlab-rake gitlab:web_hook:add URL="http://example.com/hook" NAMESPACE=acme
# source installations
bundle exec rake gitlab:web_hook:add URL="http://example.com/hook" NAMESPACE=acme RAILS_ENV=production