阿里云开发者社区

电脑版
提示:原网页已由神马搜索转码, 内容由developer.aliyun.com提供.

gitlab配置hook,commit message的时候校验提交的信息

2024-05-0739
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
简介:gitlab配置hook,commit message的时候校验提交的信息

在 GitLab 中配置 Webhook 来调用 Java 接口以校验 commit 信息,是很多公司的一些要求,因为提交信息的规范化是必要的

原理

GitLab中的拦截钩子(Interceptor Hook)是一个自定义的钩子(Hook),用于拦截和修改Git命令的输出。它的工作原理是在Git命令执行后,将命令的输出拦截下来,然后通过修改钩子脚本来对输出进行修改,最后再将修改后的输出返回给调用方。

拦截钩子的原理是利用了GitLab的Web Hooks机制。Web Hooks是一种通过HTTP POST发送通知的机制,它允许在特定事件(如代码提交、分支创建等)发生时触发自定义的脚本。通过在GitLab项目中配置Web Hook,可以指定在特定事件发生时执行的操作。

拦截钩子的配置步骤如下:

在GitLab项目中创建一个名为.gitlab-ci.yml的文件,并定义一个名为Interceptor的job。

在Interceptor job中,使用before_script或script指令定义拦截钩子的操作。这些操作可以包括对Git命令输出的处理、修改和其他自定义操作。

在Interceptor job中,使用output指令定义拦截钩子的输出格式和内容。输出格式可以是文本、JSON或其他格式,内容可以包含Git命令的原始输出、修改后的输出或其他自定义数据。

在Interceptor job中,使用only或except指令指定触发拦截钩子的特定事件。例如,可以指定在代码提交或分支创建时触发拦截钩子。

配置完成后,提交代码并触发特定事件,GitLab将会自动执行拦截钩子中的定义的操作,并将修改后的输出通过HTTP POST发送给调用方。

通过这种方式,GitLab中的拦截钩子可以实现自定义的Git命令输出拦截和修改功能,从而满足特定的需求,如对代码提交日志的格式转换、数据筛选等。

不阻止commit的版本

在 GitLab 项目中进入设置页面。

在左侧导航栏中选择 “Webhooks”(Web钩子)。

在 Webhooks 页面中点击 “Add Webhook”(添加 Webhook)按钮。

在 Webhook 配置表单中,填写以下信息:

  • Name:自定义 Webhook 的名称。
  • URL:调用 Java 接口的 URL。
  • Push events:勾选 “Push events”(推送事件)选项,以便在每次 commit 时触发 - Webhook。
  • Active:勾选 “Active”(激活)选项,使 Webhook 生效。
  • Secret token:自定义一个 secret token,用于验证请求的合法性。
  • 点击 “Add Webhook”(添加 Webhook)按钮,完成配置。

接下来,需要编写 Java 接口来接收并校验 commit 信息。以下是一个简单的示例代码,可以根据实际需求进行修改和扩展:

import javax.servlet.http.HttpServletRequest;  import org.json.JSONObject;  import com.fasterxml.jackson.databind.ObjectMapper;    @RestController  public class CommitHookController {      @Autowired      private ObjectMapper objectMapper;        @RequestMapping("/webhook")      public String webhook(HttpServletRequest request) throws Exception {          String body = request.getReader().readLine();          JSONObject json = new JSONObject(body);          String ref = json.getString("ref");          String pusher = json.getString("pusher");          JSONObject commit = json.getJSONObject("commit");          String message = commit.getString("message");            // 在这里添加校验逻辑,例如检查 commit message 是否符合要求等。          if (!message.matches("[a-zA-Z0-9\\s]+")) {              return "Invalid commit message.";          }            // 返回成功响应或其他自定义响应。          return "Commit hooks are awesome!";      }  }

实战配置如下(阻止commit提交的配置)

阻止commit提交需要修改配置文件,暂时不支持可视化配置

登录到GitLab服务器。

导航到你的项目的存储库目录。

在该目录下创建一个名为hooks的文件夹(如果已存在,请跳过此步骤)。

进入hooks文件夹。

使用文本编辑器创建一个名为pre-receive的文件。

在pre-receive文件中编写你的钩子逻辑,例如调用Java接口进行commit信息校验。

保存并关闭文件。

具体配置

#!/bin/sh    # 获取commit信息  commit_id=$1  commit_message=$(git show -s --format=%B $commit_id)    # 调用Java接口进行校验  response=$(curl -s -X POST -H "Content-Type: application/json" -d "{\"commitId\": \"$commit_id\", \"commitMessage\": \"$commit_message\"}" http://example.com/api/validate)    # 解析Java接口返回的结果  if echo $response | grep -q "error"; then    echo "Commit validation failed: $response"    exit 1  fi    # 允许提交  exit 0

配置pre-receive钩子不需要重启GitLab。在GitLab的服务器上,只需要按照以下步骤操作:

在项目的存储库目录下创建一个名为“hooks”的文件夹。

进入“hooks”文件夹。

创建一个名为“pre-receive”的文件。

在“pre-receive”文件中编写钩子逻辑,例如调用Java接口进行commit信息校验。

保存并关闭文件。

这样就完成了pre-receive钩子的配置,它会在每次提交代码时被调用,其中的逻辑是检查commit信息是否符合要求,可以阻止不符合要求的提交。

问题

  • git的webhook配置范围是单个项目还是gitlab上的所有项目

Git的Webhook配置范围可以针对单个项目,也可以针对GitLab上的所有项目。具体配置取决于你的需求。

对于单个项目,可以在项目的设置页面中找到Webhooks选项,然后进行配置。对于所有项目,可以在GitLab的全局设置中进行配置。

需要注意的是,Webhook的配置信息是存储在GitLab的数据库中的,所以在进行配置更改后,需要提交更改并推送到GitLab服务器上才能生效。

目录
相关文章
|
6月前
|
开发工具git
Gitlab配置mirrorRepository 镜像仓库
Gitlab配置mirrorRepository 镜像仓库 🔊业务场景📆1.在a项目中点击settings-》repository-》mirroring repositories📌tips🧣最后的话
20400
|
7月前
|
Shell网络安全开发工具
手把手教你配置Git客户端上传代码至Gitlab仓库
手把手教你配置Git客户端上传代码至Gitlab仓库
手把手教你配置Git客户端上传代码至Gitlab仓库
|
7月前
|
安全
Gitlab配置webhook报错:Urlis blocked: Requests to the local netwo..解决
Gitlab配置webhook报错:Urlis blocked: Requests to the local netwo..解决
|
8月前
|
Linux开发工具数据安全/隐私保护
【GitLab私有仓库】在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。 Gitlab是被广泛使用的基于git的开源代码管理平台, 基于Ruby on Rails构建, 主要针对软件开发过程中产生的代码和文档进行管理, Gitlab主要针对group和project两个维度进行代码和文档管理, 其中group是群组, project是工程项目, 一个group可以管理多个project, 可以理解为一个群组中有多项软件开发任务, 而一个project中可能包含多个branch, 意为每个项目中有多个分支, 分支间相互独立, 不同分支可以进行归并。 下面我们
|
11天前
|
存储网络安全数据安全/隐私保护
docker 安装gitlab,配置邮件,备份全流程
docker 安装gitlab,配置邮件,备份全流程
|
5天前
|
开发工具git
修改GitLab项目文件路径重新刷新配置报错问题原因及解决方案
修改GitLab项目文件路径重新刷新配置报错问题原因及解决方案
1000
|
11天前
|
jenkins持续交付API
上传gitlab代码后jenkins自动进行发布的配置
上传gitlab代码后jenkins自动进行发布的配置
|
11天前
|
Linux网络安全开发工具
【GitLab私有仓库】在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透
【GitLab私有仓库】在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透
|
11天前
|
Devops开发工具数据安全/隐私保护
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
11000
|
11天前
|
NoSQL关系型数据库MySQL
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
28001

热门文章

最新文章

相关实验场景

更多