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

9
我希望我的GitLab组中的所有项目都具有共享的Webhook配置:
<MY_JENKINS_INSTANCE>/git/notifyCommit?url=$CHANGED_REPOSITORY

GitLab的Webhook文档建议可以这样做:GitLab webhook文档。引用如下:
如果你有一个大型的项目组,则配置全局webhook对于整个组非常方便。你可以在组设置页面上添加组级别的webhook。
这听起来正是我想要的,但是在我的gitlab 7.0.0中的组设置页面上并没有这种设置。我无法确定这个功能是否在changelog中更新。
请问这个功能存在吗?如何使用它?
3个回答

8

这只有企业版才能实现:

GitLab 企业版 中,您可以为整个组配置全局 Web 钩子。您可以在组设置页面“设置 > Web 钩子”中添加组级别的 Web 钩子。


3
虽然这是正确的,但是你可以通过CE中的API管理Webhooks。 (https://gitlab.com/help/api/projects.md#hooks) - VertigoRay
1
@VertigoRay 那个页面似乎只描述了项目钩子,而与钩子相关的端点需要 :id(“项目的ID或URL编码路径”)。我尝试使用组ID,但它似乎不起作用(至少在GitLab社区版8.14.4中)。 - seanf
1
@seanf 你说得对。虽然我的建议不是很清楚,但我的意思是你可以查询组中的每个项目,并使用单独的 Jenkins Job(甚至 GitLab CI)和一些脚本为每个项目设置 Webhooks。 - VertigoRay

3

跟进@VertigoRay的评论,这里提供一种使用GitLab CE API进行操作的过程:

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

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

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

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

对于响应中的每个项目:

  • id 是下一个请求URL中要使用的<project_ID>
  • ssh_url_to_repo的值转换为URL编码<encoded_ssh_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
}

这应该使用您选择的语言进行脚本编写。

1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接