AI-Codereview-Gitlab 代码审查

  • 简介说明

    • 一个基于大模型的自动化代码审查工具,帮助开发团队在代码合并或提交时,快速进行智能化的审查(Code Review),提升代码质量和开发效率。
    • 开源地址 https://github.com/sunmh207/AI-Codereview-Gitlab
    • 官方文档及功能流程图
    # 官方部署文档
    https://github.com/sunmh207/AI-Codereview-Gitlab/tree/main/README.md
    # 官方faq文档
    https://github.com/sunmh207/AI-Codereview-Gitlab/blob/main/doc/faq.md

15.1 创建镜像

  • 操作如下

    • 修改配置文件 conf/.env
    ### 此处仅给出主要修改项并非文件全部内容
    #大模型供应商配置,支持 deepseek, openai,zhipuai,qwen 和 ollama
    LLM_PROVIDER=deepseek
    
    #DeepSeek settings
    DEEPSEEK_API_KEY=sk-2QbAlyIgZ7*************************AadZ
    DEEPSEEK_API_BASE_URL=https://api.lkeap.cloud.tencent.com/v1
    DEEPSEEK_API_MODEL=deepseek-r1 # 选择的模型名称
    
    # 企业微信通知配置
    WECOM_ENABLED=1
    # 通知webhook地址
    WECOM_WEBHOOK_URL=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=ccf6d906-b84c-45a4-a644-b1*****73
    
    # Dashboard登录用户名和密码
    DASHBOARD_USER=super
    DASHBOARD_PASSWORD=lmdfjoan4R
    
    # queue (async, rq)
    QUEUE_DRIVER=async
    REDIS_HOST=redis
    
    # gitlab 代码仓库域名地址,需要把域名中的 . 符号换成 _
    WORKER_QUEUE=gitlab_example_com
    • Dockerfile 调整,主要将相关源替换为国内的。也可直接使用官方镜像
    # 使用官方的 Python 基础镜像
    FROM python:3.10-slim AS base
    
    WORKDIR /app
    
    # 清空所有 sources.list.d 下的文件,确保不会使用官方 bookworm 源
    RUN rm -rf /etc/apt/sources.list.d/*
    
    # 覆盖sources.list为阿里云Debian bullseye源
    RUN echo "deb http://mirrors.aliyun.com/debian bullseye main contrib non-free\n\
    deb http://mirrors.aliyun.com/debian-security bullseye-security main contrib non-free\n\
    deb http://mirrors.aliyun.com/debian bullseye-updates main contrib non-free\n" > /etc/apt/sources.list && \
      apt-get update && apt-get install -y --no-install-recommends supervisor && \
      rm -rf /var/lib/apt/lists/*
    
    COPY requirements.txt .
    
    RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    RUN mkdir -p log data conf
    COPY biz ./biz
    COPY api.py ./api.py
    COPY ui.py ./ui.py
    COPY conf/prompt_templates.yml ./conf/prompt_templates.yml
    
    CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
    
    FROM base AS app
    COPY conf/supervisord.app.conf /etc/supervisor/conf.d/supervisord.conf
    EXPOSE 5001 5002
    
    FROM base AS worker
    COPY ./conf/supervisord.worker.conf /etc/supervisor/conf.d/supervisord.conf
    • 创建镜像
    docker build -t ai-codereview-gitlab:1.3.10-1 . 

15.2 创建容器

  • 操作如下

    • 官方参考
    https://github.com/sunmh207/AI-Codereview-Gitlab/blob/main/docker-compose.rq.yml
    • docker-compose.yaml
    # 这个是使用了Redis Queue的版本
    services:
    app:
      image: ghcr.io/sunmh207/ai-codereview-gitlab:1.3.10
      ports:
        - "5001:5001"
        - "5002:5002"
      volumes:
        - ./data:/app/data
        - ./log:/app/log
      env_file:
        - ./conf/env
      depends_on:
        redis:
          condition: service_started
      restart: unless-stopped
    
    worker:
      image: ghcr.io/sunmh207/ai-codereview-gitlab:1.3.10-worker
      volumes_from:
        - app
      env_file:
        - ./conf/env
      depends_on:
        redis:
          condition: service_started
      restart: unless-stopped
    
    redis:
      image: redis:alpine
      volumes:
        - ./redis_data:/data
      restart: unless-stopped
    • 启动服务
    docker-compose up -d
  • 注意

    • 此方式需要在同一个 docker-compose.yaml 文件中把 redis 配置也写上,也就是说必须要额外新跑一个redis服务
    • 因为在官方提供的配置文件中写死了redis连接信息,如下所示
    # conf/supervisord.worker.conf
    [program:worker]
    command=rq worker %(ENV_WORKER_QUEUE)s --url redis://redis:6379 --path /app
    • 如果想使用自定义的redis配置,需要对此配置文件进行调整(后续有提到),或者也把你的redis信息写死在这里重新构建镜像
    • 如果不需要Redis配置,可直接使用官方提供的 demo
    https://github.com/sunmh207/AI-Codereview-Gitlab/blob/main/docker-compose.yml

15.3 配置 Webhook

  • 操作如下

    • 在 GitLab 个人设置中,创建一个 Personal Access Token 推荐
    • 在项目中,配置AI审查服务的 webhook: http://192.168.26.21:5001/review/webhook
    Trigger Events:勾选 Push Events 和 Merge Request Events (不要勾选其它Event)
    Secret Token:上面配置的 Access Token(可选)
    • 点击 "Add webhook" 保存,如保存时有下面提示,请按后续图示操作
    • 可以点击"测试",查看效果

15.4 存在不足与二开优化

  • 说明

    • Redis配置不应写死在配置文件中,应该通过读取环境变量的方式
    • 不是所有分支都要触发AI代码审查的webhook,应该支持通过配置分支匹配正则的方式,符合正则的分支方可触发。
    • 目前,gitlab支持push请求在webhook设置界面配置正则,但merge请求不支持直接页面配置正则。
    • 此时可以通过对本项目进行二开使其支持根据正则表达式过滤指定分支触发审查
  • 操作如下

    • 二开开源地址
    https://gitee.com/hukanfa/ai-codereview-gitlab-hkf
    • 修改 conf/supervisord.worker.conf
    [program:worker]
    command=rq worker %(ENV_WORKER_QUEUE)s --url redis://%(ENV_REDIS_HOST)s:%(ENV_REDIS_PORT)s --path /app
    • conf/.env
    # queue (async, rq) redis
    QUEUE_DRIVER=async
    REDIS_HOST=192.168.26.21
    REDIS_PORT=6379
    
    ### 分支正则配置
    # 开启Push Review功能(如果不需要push事件触发Code Review,设置为0)
    PUSH_REVIEW_ENABLED=1
    # 分支设定
    TARGET_BRANCH_REGEX_PATTERNS="^main$|^master$|^train"
    • docker-compose.yaml
    services:
    app:
      image: ai-codereview-gitlab:1.3.10-1
      ports:
        - "5001:5001"
        - "5002:5002"
      volumes:
        - ./data:/app/data
        - ./log:/app/log
      env_file:
        - ./conf/env
      restart: unless-stopped
    
    worker:
      image: ai-codereview-gitlab:1.3.10-worker-1
      volumes:
        - ./data:/app/data
        - ./log:/app/log
      env_file:
        - ./conf/env
      restart: unless-stopped