如何在服务器端使用GitLab触发git hook

4

所以我需要在从任何分支合并到我的仓库的开发分支时,对某些文件名进行验证。我搜索了很多,但是我找到的唯一示例是将Jenkins和GitLab集成以在每个提交/推送等中构建项目。

但是有没有可能配置一个预推脚本以在服务器端执行(也许由Jenkins执行),以便每次收到推送以将某些内容合并到这个开发分支时,我都可以执行自定义脚本?我不想构建它,只想对文件进行验证,以便能够停止或不停止推送请求。

1个回答

2

Jenkins GitLab hook插件用于监听并接收GitLab发送的每个推送事件(针对特定存储库)。

从那里,您可以使用您想要执行的脚本触发任何Jenkins作业(不一定是构建作业)。
如果您想在合并到develop分支之前执行该脚本,则需要使Webhook监视器完成在专用分支上进行的推送事件(这将触发脚本,然后将其合并到dev并推送)。


如果您的GitLab实例是本地部署的,那么您可以考虑设置“自定义服务器端Git钩子”,例如:
  • 一个pre-receive钩子,如果推送不符合某些标准,则可以使其失效
  • 一个post-receive钩子,可以修改一些文件(可能会添加新的附加提交)

抱歉,我没有很好地理解你的建议。你所说的“专用分支”是什么意思?我明白我需要配置 Webhook 以使用此插件将推送事件发送到 Jenkins,对吗?但是我能否在我的脚本中拒绝推送?(例如使用 pre-push 钩子) - Alexandre Miziara
1
@AlexandreMiziara “我理解我需要使用这个插件配置Webhook来向Jenkins发送推送事件,对吗?”:不是的,该插件用于监听Webhook,这意味着推送已经在GitLab端完成,然后通知任何侦听器。因此,我的建议是将其推送到专用分支(即与develop不同的分支):然后您的脚本将被触发(由Jenkins侦听器),并且可以决定是否将其推送到实际目标分支(develop)或不推送(这将“阻止推送”-到develop)。 - VonC
2
@AlexandreMiziara "before push": 这是一个客户端脚本,不太方便,因为它需要分发(给客户端),并且可以被绕过。"pre-receive hook": 在GitLab方面不可能实现(如果您正在谈论gitlab.com),但在私有的本地GitLab实例上可能是可能的。顺便问一下,为什么在您的情况下不能将推送到中间专用分支? - VonC
我看到了这个文档,这就是为什么我提到了“pre-receive hook”。因为我们今天使用的流程总是从特性分支创建合并请求到develop。我的脚本需要在实际推送到develop之前更改一些文件名。 - Alexandre Miziara
1
@AlexandreMiziara,您提到的文档(https://docs.gitlab.com/ee/administration/custom_hooks.html)仅适用于您可以访问和控制GitLab服务器实例的情况。 - VonC
显示剩余3条评论

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