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

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

不阻止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服务器上才能生效。

相关推荐
唐可盐3 小时前
Ubuntu安装Gitlab详细图文教程
git·gitlab·github
爱宇阳6 小时前
在服务器上安装 gitlab-runner
gitlab·gitlab-runner
what_20187 小时前
Gitlab服务管理和仓库项目权限管理
运维·gitlab
是程序喵呀4 天前
部署GitLab服务器
运维·服务器·gitlab
JAVA终结者4 天前
IDEA结合GitLab使用
gitlab
江梦寻4 天前
GitHub、Google等镜像加速地址收集
前端·后端·编辑器·gitlab·github·gitcode
guangshui5165 天前
2030. gitLab A仓同步到B仓
gitlab
丁总学Java6 天前
推送(push)项目到gitlab
gitlab
YCyjs6 天前
gitlab
gitlab
yanlaifan6 天前
共享GitLab中CICD自动生成的软件包
gitlab