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

相关推荐
明月心95220 小时前
git remote add 用法
gitlab
only_Klein1 天前
jenkins流水线报错:Connection reset by peer
ci/cd·kubernetes·gitlab·jenkins·ssl
梁萌2 天前
docker部署gitlab和gitlab runner
docker·eureka·gitlab
johnnyAndCode2 天前
Idea 设置GitLab时使用账密,而不是token的配置方法
gitlab·idea
天外飞雨2 天前
Gitlab使用
gitlab
BUTCHER53 天前
GitLab SSH 密钥配置
运维·ssh·gitlab
明月心9523 天前
GitLab使用
gitlab
明月心9524 天前
gitlab pull requets
gitlab
BUTCHER54 天前
GitLab基本设置
gitlab
张小凡vip4 天前
Kubernetes---gitlab的ci/cd发布基于k8s的项目示例参考
ci/cd·kubernetes·gitlab