落地实现的流程图

image-20251021112322029

具体实现:

a)设置webhook地址

在设置–webhooks中配置接口(node服务)地址、触发来源,如无webhooks入口需申请相应的权限

img

b) 在什么情况下需要调用上面配置的webhook发起审查

在gitlab上发起合并请求,将触发webhook。

此时将发起post请求、并携带相关gitlab的body参数进入到上面的配置的接口中,其中主要用到的参数是body.project(项目信息)、body.object_attributes(触发的hook类型对应的属性信息)

注意: 在更新或合并请求时也会触发hook,如果只想要创建时触发、需要过滤掉这些情况。

要区分创建、更新或合并操作,可以使用object_attributes字段中的action字段。其值有:

· open:表示Merge Request被创建。

· update:表示现有的Merge Request被更新。

· merge:表示Merge Request被合并。

· close:表示Merge Request被关闭

另外在测试webhooks时会要用到合并状态object_attributes.state,其值有:

· opened:表示合并请求已被打开,正在等待处理。

· closed:表示合并请求已被关闭,但并未合并。

· merged:表示合并请求已被接受并合并到目标分支。

· locked:表示合并请求因为某些原因被锁定。

一般情况下只需要对以下3种情况发起审查

· 创建合并请求时

· 本地调试、在gitlab页面test手动触发

· gitlab上点击合并请求测试时,此时action===undefined,state值是不固定的

c) 如何拿到diff代码

创建项目令牌,获取token(用户请求gitlab api)

img

gitlab文档地址(要科学上网): https://archives.docs.gitlab.com/15.11/ee/api/notes.html#create-new-merge-request-note

根据project_id和request_id调用gitlab api获取到diff信息:

img

d) 结合提示词 + diff代码 调用AI接口获得分析后的结果

e)将结果通过gitlab接口写入到commentimg