AI-Codereview-Gitlab是一个基于大模型的自动化代码审查工具,帮助开发团队在代码合并或提交时,快速进行智能化的审查(Code Review),提升代码质量和开发效率。

主要功能

  • 多模型支持

    • 兼容 DeepSeek、ZhipuAI、OpenAI、通义千问 和 Ollama,想用哪个就用哪个。
  • 消息即时推送
    • 审查结果一键直达 钉钉、企业微信 或 飞书,代码问题无处可藏!
  • 自动化日报生成
    • 基于 GitLab & GitHub Commit 记录,自动整理每日开发进展,谁在摸鱼、谁在卷,一目了然 。
  • 可视化 Dashboard
    • 集中展示所有 Code Review 记录,项目统计、开发者统计,数据说话,甩锅无门!
  • Review Style 任你选
    • 专业型 :严谨细致,正式专业。
    • 讽刺型 :毒舌吐槽,专治不服("这代码是用脚写的吗?")
    • 绅士型 :温柔建议,如沐春风("或许这里可以再优化一下呢~")
    • 幽默型 :搞笑点评,快乐改码("这段 if-else 比我的相亲经历还曲折!")

工作原理

当用户在 GitLab 上提交代码(如 Merge Request 或 Push 操作)时,GitLab 将自动触发 webhook事件,调用本系统的接口。系统随后通过第三方大模型对代码进行审查,并将审查结果直接反馈到对应的 Merge Request 或 Commit 的Note 中,便于团队查看和处理。

以上均为官方描述,下面进行实战部署操作。

部署实战

官方给了两种部署方案,分别是Docker部署和本地Python环境部署,我们采用的是第一种,并且根据实战操作对部分内容进行了修改。

1. 前期环境准备

操作系统:centos7

Docker版本:24.0.0

Docker-Compose版本:v2.28.0

git版本:1.8.3.1

  • Docker国内镜像源设置:

    vim /etc/docker/daemon.json

    将daemon.json改为如下内容:

    {
    "registry-mirrors": ["https://registry.docker-cn.com","https://pee6w651.mirror.aliyuncs.com"],
    "live-restore": true
    }

    保存成功后,运行如下命令进行重新加载:

    systemctl daemon-reload
    systemctl restart docker

2.获取源码

实战命令(由于访问GitHub经常超时或者时间较长):

cd /opt
git clone https://gitcode.com/gh_mirrors/ai/AI-Codereview-Gitlab.git
cd AI-Codereview-Gitlab

官方命令:

cd /opt
git clone https://github.com/sunmh207/AI-Codereview-Gitlab.git
cd AI-Codereview-Gitlab

3. 配置文件

获取源码后,在AI-Codereview-Gitlab目录下,创建配置文件,执行如下命令:

cp conf/.env.dist conf/.env
vim conf/.env

编辑 conf/.env 文件,配置以下关键参数:

  • 大模型供应商配置参数,此处采用本地ollama部署的Deepseek:32B的大模型,因此修改如下参数部分:

    #大模型供应商配置,支持 deepseek, openai,zhipuai,qwen 和 ollama
    LLM_PROVIDER=ollama
    ...
    #OllaMA settings; 注意: 如果使用 Docker 部署,127.0.0.1 指向的是容器内部的地址。请将其替换为实际的 Ollama服务器IP地址。
    OLLAMA_API_BASE_URL=http://127.0.0.1:11434
    OLLAMA_API_MODEL=deepseek-r1:32b
    ...
  • Gitlab配置,由于本地GitLab端口不是默认80,因此修改如下参数部分:

    #Gitlab配置
    GITLAB_URL=http://192.168.1.111:9080/ #部分老版本Gitlab webhook不传递URL,需要开启此配置,示例:https://gitlab.example.com
    #GITLAB_ACCESS_TOKEN={YOUR_GITLAB_ACCESS_TOKEN} #系统会优先使用此GITLAB_ACCESS_TOKEN,如果未配置,则使用Webhook 传递的Secret Token

    同时还需要修改api.py文件内容,修改内容如下:


    def handle_github_webhook(event_type, data):
    # 获取GitHub配置
    github_token = os.getenv('GITHUB_ACCESS_TOKEN') or request.headers.get('X-GitHub-Token')
    ...
    改为:
    def handle_github_webhook(event_type, data):
    # 获取GitHub配置
    github_token = os.getenv('GITHUB_ACCESS_TOKEN')
    ...
  • 推送配置,由于本次没有设置企微或钉钉推送,因此未进行相关配置,有需求根据env中的提示进行配置。

4. 镜像修改

官方配置的镜像源部分位于境外,导致部署过程中下载较慢或者网络异常,因此需要修改docker-compose.yml和Dockerfile中的部分参数,具体如下:

  • 修改docker-compose.yml中的image参数:

  • 修改Dockerfile中Python 基础镜像和依赖源参数:

    # 使用官方的 Python 基础镜像改为swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/python:3.10-slim国内
    FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/python:3.10-slim AS base
    ...
    # 安装依赖加上国内源
    RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple/

    修改完成后进行保存。

5. 启动服务

docker-compose up -d

6. 验证部署

7. 配置 GitLab Webhook

创建Access Token

方法一:在 GitLab 个人设置中,创建一个 Personal Access Token。

方法二:在 GitLab 项目设置中,创建Project Access Token。

注:创建的Access Token需要复制后单独保存,否则无法再次获取。

配置 Webhook

在 GitLab 项目设置中,配置 Webhook:

备注

  1. Token使用优先级

    - 系统优先使用 .env 文件中的 GITLAB_ACCESS_TOKEN。

    - 如果 .env 文件中没有配置 GITLAB_ACCESS_TOKEN,则使用 Webhook 传递的Secret Token。
  2. 网络访问要求

    - 请确保 GitLab 能够访问本系统。

    - 若内网环境受限,建议将系统部署在外网服务器上。

8. 配置消息推送

配置钉钉推送

  • 在钉钉群中添加一个自定义机器人,获取 Webhook URL。

  • 更新 .env 中的配置:

    #钉钉配置
    DINGTALK_ENABLED=1 #0不发送钉钉消息,1发送钉钉消息
    DINGTALK_WEBHOOK_URL=https://oapi.dingtalk.com/robot/send?access_token=xxx #替换为你的Webhook URL

企业微信和飞书推送配置类似。

最终效果

基于docker的AI-Codereview-Gitlab部署实战的更多相关文章

  1. 基于 docker 的yapi(快速部署)

    1.使用官方的mongodb镜像 docker run --network yapi_net --ip 172.30.0.10  -d --name yapi_mongodb --restart al ...

  2. 基于docker实现哨兵集群部署

    简单dockerfile文件,用于演示sentinel哨兵故障转移FROM centos:latest MAINTAINER BIXIAOYU RUN groupadd -r redis && ...

  3. 基于 Docker 的微服务架构实践

    本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...

  4. 基于 Docker 和 GitLab 的前端自动化部署实践笔记

    基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...

  5. SpringCloud+Docker+Jenkins+GitLab+Maven实现自动化构建与部署实战

    1.前言与初衷 本文章会涉及Docker常见命令基础知识点结合不同场景实操一起使用. 本文章会涉及结合工作过程中部署不同环境服务器的项目案例场景为初心进行实际细讲. 本文章主要讲述Docker.Jen ...

  6. 【K8S】基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境(环境搭建篇)

    写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 服务器规划 IP 主机名 节点 操作 ...

  7. 三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境

    写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 文章和搭建环境所需要的yml文件已收 ...

  8. 使用gitlab构建基于docker的持续集成(三)

    使用gitlab构建基于docker的持续集成(三) gitlab docker aspnetcore 持续集成 构建发布思路: aspnetcore 下的dockerfile编写 发布docker- ...

  9. 使用gitlab构建基于docker的持续集成(一)

    使用gitlab构建基于docker的持续集成(一) gitlab docker aspnetcore 持续集成 开篇 整体环境规划 准备工作 CA证书 虚拟机系统:安装Centos7.3 3.设置C ...

  10. 基于Docker配置本地Gitlab

    技术背景 Github和Gitee(码云)是最常见的基于git的代码托管平台,现在基于svn的代码管理仓库已经相对比较少见了,大部分还都是企业内部的代码仓.但是基于开源的Gitlab,我们在企业内网也 ...

随机推荐

  1. Luogu P2414 NOI2011 阿狸的打字机 题解 [ 紫 ] [ AC 自动机 ] [ 离线思想 ] [ 树状数组 ] [ dfs 序 ]

    阿狸的打字机:非常牛的 AC 自动机题. 暴力 先考虑在暴力的情况下,我们如何计算 \(x\) 匹配 \(y\) 的次数.显然,我们会模拟往 \(y\) 里加字符的过程,在此过程中做 KMP 进行匹配 ...

  2. Android ADB 使用笔记

    ADB 工作原理 当启动某个adb客户端时,该客户端会先检查是否有adb服务器正在运行,如果没有则启动服务器进程.服务器会在启动后与本地TCP端口 5037 绑定,并监听adb客户端 发出的命令. 服 ...

  3. MySQL - [09] 正则表达式

    转载:https://mp.weixin.qq.com/s/7RavuYGs9SthX2pxGJppqw select * from t1 where name rlike '^[a-zA-Z]+$' ...

  4. Flink学习(十八) 状态管理与状态编程

    Flink中的状态 由一个任务维护,并且用来计算某个结果的所有数据,都属于这个任务的状态:可以认为状态就是一个本地变量,可以被任务的业务逻辑访问:Flink会进行状态管理,包括状态一致性,故障处理以及 ...

  5. Educational Codeforces Round 175 (Rated for Div. 2) 比赛记录

    Educational Codeforces Round 175 (Rated for Div. 2) 比赛记录 比赛连接 手速场,上蓝场,但是有点唐,C 想错了写了半个多小时,想到正解不到 \(10 ...

  6. 【C#语法糖 Lambda】2 - 表达式树与LINQ

    一.声明 曾经遇到一个这样的场景: GetEntities(a => a.OrderKindCodeId == 16 && a.IsDeleted, this.DefaultCo ...

  7. 2022美亚杯个人赛wp(纯文字思路)

    2022美亚杯个人赛wp(纯文字思路) vc镜像密码CZDGm#&2_Ns$7wSMn%ZGr7xntcHS7d5uFta#Up9544jx_cvP$uFM7?pTDa*jN&QyFD ...

  8. 关于centos 7安装binwalk的过程中产生的问题

    啊,kali机坏了,又安的centos o(╥﹏╥)o 但是centos没有binwalk,它也不能像kali机一样之间install 又在网上搜教程 https://blog.csdn.net/qq ...

  9. AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现

    引言 在当今这个数据爆炸的时代,信息的快速存储与高效检索已经成为技术领域的核心挑战.随着人工智能(AI)和机器学习(ML)的迅猛发展,向量存储和相似性搜索技术逐渐崭露头角,成为处理海量数据的利器.对于 ...

  10. Pydantic多态模型:用鉴别器构建类型安全的API接口

    title: Pydantic多态模型:用鉴别器构建类型安全的API接口 date: 2025/3/20 updated: 2025/3/20 author: cmdragon excerpt: Py ...