基于 GitLab CI/CD 与 DeepSeek 的 AI Code Review 自动化方案
基于 GitLab CI/CD 流水线与 DeepSeek 大语言模型实现自动化代码审查。通过配置 GitLab Runner 运行 Python 脚本,在合并请求触发时自动获取代码差异并调用 DeepSeek API 进行分析,最终将审查意见以评论形式发布回 MR 页面。该方案旨在降低人工审查成本,提升代码质量与团队效率,支持自定义 Prompt 以适应不同技术栈需求。

基于 GitLab CI/CD 流水线与 DeepSeek 大语言模型实现自动化代码审查。通过配置 GitLab Runner 运行 Python 脚本,在合并请求触发时自动获取代码差异并调用 DeepSeek API 进行分析,最终将审查意见以评论形式发布回 MR 页面。该方案旨在降低人工审查成本,提升代码质量与团队效率,支持自定义 Prompt 以适应不同技术栈需求。

[图片:代码审查结果示例]
本方案旨在解决手动代码审查(Code Review)耗时耗力、标准不一的问题。通过利用 GitLab 自带的 CI/CD 功能,在开发者创建合并请求(Merge Request, MR)时自动触发一个流水线任务。该任务会提取 MR 中的代码变更,调用 DeepSeek API 模型进行分析,并将 AI 生成的审查意见以评论的形式自动发布回 MR 页面,从而为人工审查提供有价值的参考,提升代码质量和团队效率。
进入需要集成此功能的 GitLab 项目:
在项目代码库的根目录下,创建以下两个文件:
import os
import requests
import json
# --- 1. 从 CI/CD 环境变量中获取配置 ---
GITLAB_API_URL = os.environ.get("CI_API_V4_URL")
PROJECT_ID = os.environ.get("CI_PROJECT_ID")
MR_IID = os.environ.get("CI_MERGE_REQUEST_IID")
GITLAB_TOKEN = os.environ.get("GITLAB_ACCESS_TOKEN")
DEEPSEEK_API_KEY = os.environ.get("DEEPSEEK_API_KEY")
def check_env_vars():
"""检查所有必要的环境变量是否存在"""
if not all([GITLAB_API_URL, PROJECT_ID, MR_IID, GITLAB_TOKEN, DEEPSEEK_API_KEY]):
print("Error: Missing one or more required environment variables.")
exit(1)
# --- 2. 与 GitLab API 交互 (无变动) ---
def get_mr_changes():
url = f"{GITLAB_API_URL}/projects/{PROJECT_ID}/merge_requests/{MR_IID}/changes"
headers = {"PRIVATE-TOKEN": GITLAB_TOKEN}
try:
response = requests.get(url, headers=headers, timeout=20)
response.raise_for_status()
changes = response.json().get('changes', [])
return "\n".join([change['diff'] for change in changes])
except requests.exceptions.RequestException as e:
print(f"Error fetching MR changes from GitLab: {e}")
return None
def post_review_to_gitlab():
url =
headers = {: GITLAB_TOKEN}
body =
data = {: body}
:
response = requests.post(url, headers=headers, data=data, timeout=)
response.raise_for_status()
()
requests.exceptions.RequestException e:
()
():
api_url =
headers = {
: ,
:
}
prompt =
payload = {
: ,
: [{: , : prompt}],
: ,
: ,
:
}
:
response = requests.post(api_url, headers=headers, data=json.dumps(payload), timeout=)
response.raise_for_status()
result = response.json()
review_content = result[][][][]
review_content
requests.exceptions.RequestException e:
detailed_error_message =
()
detailed_error_message
(KeyError, IndexError) e:
detailed_error_message =
()
detailed_error_message
__name__ == :
check_env_vars()
()
diff_content = get_mr_changes()
diff_content diff_content.strip():
()
exit()
()
review_result = call_deepseek_api(diff_content)
review_result:
post_review_to_gitlab(review_result)
:
post_review_to_gitlab()
exit()
stages:
- review
.python-base:
image: python:3.9-slim
before_script:
- pip install requests
ai_code_review:
extends: .python-base
stage: review
script:
- python ai_review.py
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
[图片:MR 评论示例]
可以点击 MR 页面的 "Pipelines" 标签页,查看 ai_code_review job 的运行状态和日志。
[图片:Pipeline 日志示例]
创建 MR 后,GitLab 会自动启动一个新的流水线。
[图片:流水线触发示例]
ai_review.py 脚本中的 prompt 是整个系统的核心。可以根据团队的技术栈(如 Java, Go, Frontend)和编码规范,对 Prompt 进行深度定制,以获得更精准的审查结果。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online