您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center 汽车系统工程   模型库  
会员   
   
AI辅助企业网络安全&治理
6月11-12日 北京+线上
基于模型的数据治理与数据中台
6月16-17日 北京+线上
Spec Driven Development 工程化实践
6月12-13日 北京+线上
     
   
 订阅
适用所有团队研发提效|带你1分钟上手基于Claude Code的AI代码评审实践
 
作者:仁执
  105   次浏览      8 次
 2026-6-8
 
编辑推荐:
通过这篇文章,你将了解到Claude Code用于CR的流水线搭建原理和效果,如何在1分钟内接入你的代码项目,并启发你对AI Coding Agent用于CI/CD提效的思考,希望对你的学习有帮助。
本文来自于阿里云开发者公众号,由火龙果软件Alice编辑推荐。

问题痛点

当前CR流程说明: 目前我们组的CR流程,是研发完成代码开发后,在代码平台上手动开启代码评审单,交由多位同学人工评审,同时触发Aone AI评审。

当前流程的 主要问题 如下:

1. 人工评审耗时较长,员工心力消耗大,可能会拖慢小组整体的研发节奏,同时也不一定保证能发现所有问题;

2. 现有的代码分析、AI评审工具,也都存在一些经常发生的问题:

  • 误报较多;
  • 分析不够深入,无法联合分析上下游代码,许多业务逻辑问题难发现;
  • 纠正意见不太实用。

解决思路

我们尝试利用 Claude Code 的强大AI Coding Agent能力,结合 AONE MCP Server ,来在 代码平台CI流水线 中实现更智能的AI代码评审,为团队提供一个 低成本、高收益 的代码质量检查工具。

image

Claude Code 官方文档: https://docs.anthropic.com/zh-CN/docs/claude-code/quickstart

当前效果

运行效果

当代码评审开启以及后续新增commit时,会触发CR流水线开启AI分析,最终将分析结果同步至CR评论区,如下图(发现了项目里一直存在但没人提出的死循环阻塞获取限流锁的代码)。

image

提效效果

目前体感来看,许多AI建议是有必要的、能启发人的。其中,人分析到但AI没考虑到的情况比较少。但是,因为还在调试阶段,所以也不是能解决全部问题。因此,估摸给个数字的话,可能是 提效50% 以上。

长期预测来看,如果后续调教优化得好,应该在以下2方面给CR工作带来明显收益:

  • 提效:辅助人工,大幅减少发现问题、分析问题、给出建议的时间,80%不是问题;
  • 提质:超越人工,发现人工察觉不了的潜在问题,给质量工程满满安全感;

解决方案详细说明

整体流程架构

image

核心设计要点

1. 可配置的Claude Code流水线模板

封装了一个流水线模板在代码平台市场,提供了自动安装最新Claude Code的容器环境,支持配置Claude Code API相关信息、Aone MCP Server API、容器执行Shell脚本(可以完全自定义如何调用Claude Code)、流水线触发条件和事件通知方式。

2. 基于MCP的CR信息交互

通过AONE MCP Server获取CR相关信息,避免了git获取远程信息时的权限问题。

3. 变更代码智能分层处理策略

  • Level 1:完全未分析的区域 → 重点深度分析;
  • Level 2:部分分析过的区域 → 对于后续新增commit里,增量的新代码进行重点分析;
  • Level 3:已完整分析过的区域 → 简单的重审分析;

4. Multi/Background Agent 并行处理提升效率

3个处理器同时工作,每个专注于不同类型的代码变更,提高整体处理速度。

5. 超时控制

调用Claude Code实例时,指定最大运行时长,默认30分钟。

具体流水线配置(迭代优化中)

name: Claude Code AI CR

triggers:
  push:
    branches:
      - feature/**
  merge_request:
    target-branches:
      - '**'
params:
  ANTHROPIC_BASE_URL:
    name: ANTHROPIC_BASE_URL
    description: Claude Code 环境变量,指定模型端口地址
    required: true
  ANTHROPIC_AUTH_TOKEN:
    name: ANTHROPIC_AUTH_TOKEN
    description: Claude Code 环境变量,指定模型访问密钥
    required: true
  ANTHROPIC_MODEL:
    name: ANTHROPIC_MODEL
    description: Claude Code 环境变量,指定模型型号,可为空
    required: false
  AONE_MCP_URL:
    name: AONE_MCP_URL
    description: AONE MCP SERVER的url,在code界面右侧可以获取到
    required: true
  shell:
    name: shell
    description: 执行脚本
    required: false
    default: |-
      #!/bin/bash
# =============================================================================
# 基于 MCP 的智能分层 AI 代码评审系统
# 解决方案:通过 AONE MCP 获取 CR 信息,实现智能增量分析
# =============================================================================
# 配置 MCP 连接
cat > mcp.json << 'EOF'
{
  "mcpServers": {
    "aone": {
      "type": "sse",
      "url": "${{params.AONE_MCP_URL}}"
    }
  }
}
EOF
repo=${{git.repo}}
sourceBranch=${{git.branch}}
echo "仓库: ${repo}, 分支: ${sourceBranch}"
# =============================================================================
# 步骤1: 检查是否存在评审中的 CR
# =============================================================================
echo "步骤1: 查找评审中的 CR..."
cr_info=$(claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools 
"mcp__aone__list_repo_merge_requests" --print "使用 aone mcp 的 list_repo_merge_requests 工具,
指定3个参数为 repo=${repo}, state=opened, sourceBranch=${sourceBranch} 
来查看评审中的 CR,如果失败请重试3次,如果最终还是不存在,则返回 'CR_NOT_FOUND'")

echo "CR查询结果: $cr_info"
echo "$cr_info" | grep -q 'CR_NOT_FOUND' && {
    echo "未找到评审中的 CR,退出分析"
    exit 0
}

# 判断已经存在的CR评论是否已经超过限制
comments_info=$(claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools 
"mcp__aone__list_merge_request_comments" --continue --print
 "使用 mcp__aone__list_merge_request_comments 工具获取当前分支已经提过的所有评论信息,
如果已经存在的高风险问题评论数量超过 15个,则返回'CR_MORE_LIMIT',否则返回未超过限制")
echo "评论结果: $comments_info"
echo "$comments_info" | grep -q 'CR_MORE_LIMIT' && {
    echo "添加评论已超过限制,退出分析"
    exit 0
}

# =============================================================================
# 步骤2: 获取 CR 的变更文件和现有评论
# =============================================================================
echo "步骤2: 获取 CR 变更文件和现有评论..."
# 获取变更文件列表
echo "===================================获取变更文件列表 START=========================================="
claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools 
"mcp__aone__list_merge_request_changed_files" --continue --print 
"使用 mcp__aone__list_merge_request_changed_files 工具获取当前分支用户更改过的所有变更文件列表,
生成一个changed_files.md,必须写changed_files.md 文件成功,如果没有成功请重试3次"
cat changed_files.md
echo "
===================================获取变更文件列表 END==========================================
"

# 获取现有评论
echo "===================================获取现有评论 START=========================================="
claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools
 "mcp__aone__list_merge_request_comments" --continue --print 
"使用 mcp__aone__list_merge_request_comments 工具获取当前分支已经提过的所有评论信息,
生成一个existing_comments.md,必须写 existing_comments.md 文件成功,如果没有成功请重试3次"
cat existing_comments.md
echo "
===================================获取现有评论 END==========================================
"

# =============================================================================
# 步骤3: 主控分析器 - 智能分层分析
# =============================================================================
echo "步骤3: 执行智能分层分析..."

exe_info=$(claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools 
"mcp__aone__get_changed_file_diff" --print "
作为代码评审的主控分析器,执行以下任务:

1. 读取当前分支中变更文件列表文档:changed_files.md
2. 读取当前分支中现有评论文档:existing_comments.md 
3. 使用 mcp__aone__get_changed_file_diff 工具获取每个变更文件的具体 diff, 如果获取失败,
忽略该文件,继续获取下个变更文件的具体 diff

然后进行智能分层分析,对变更区域进行3个划分,生成3个精炼的描述文件:

**level1_unanalyzed.md** - 完全未分析的区域
- 格式:文件路径 | 行号范围 | 变更类型 | 关键信息
- 区域判断标准:没有任何评论覆盖的代码变更区域
- 要求:仅采纳高风险问题,添加的CR必须添加到对应的行数位置

**level2_partial.md** - 部分分析过的区域  
- 格式:文件路径 | 行号范围 | 变更类型 | 新增部分描述
- 区域判断标准:有部分评论但存在新增行的代码区域
- 要求:仅采纳高风险问题,添加的CR必须添加到对应的行数位置

**level3_recheck.md** - 需要重新审视的区域
- 格式:文件路径 | 行号范围 | 变更类型 | 重审原因
- 区域判断标准:已有评论但代码发生显著变化的区域
- 要求:仅采纳高风险问题,添加的CR必须添加到对应的行数位置

要求:
- 执行必须检查 changed_files.md 和 existing_comments.md  是否存在,如果不存在,则返回 'FILE_NOT_FOUND'
- 严格注意底线:只看当前分支里变更的部分!不允许对当前分支未变更的部分添加评论!
- 每个描述文件内容精炼简短
- 明确标识出具体的文件路径和行号范围
- 便于后续3个处理器并行处理
- 同样的问题不能重复提评论
- 添加的评论必须添加到对应代码对应的行数位置,不允许错位
- 仅采纳高风险问题
- 添加的评论必须检查之前是否已经存在相似评论,如果已经存在相似评论,不能重复添加
- 三个分层添加的评论,必须追加到 existing_comments.md, 每次添加评论必须检查是否在 
existing_comments.md 存在相似记录,存在就不能重复添加

")

echo "分层分析执行结果: $exe_info"
echo "$exe_info" | grep -q 'FILE_NOT_FOUND' && {
    echo "未找到变更文件和评论,退出分析"
    exit 0
}

# =============================================================================
# 步骤4: 分层并行处理(3个独立的 Claude Code 实例)
# =============================================================================
echo "步骤4: 启动分层并行处理..."
# Level 1 处理器 - 深度分析未分析区域
echo "启动 Level 1 处理器(深度分析)..."
claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools "mcp__aone" --print "
作为[仓库: ${repo}, 分支: ${sourceBranch}]代码评审的 Level 1 处理器,专注深度分析:

1. 读取 level1_unanalyzed.md 中的未分析区域
2. 对这些区域进行完整的代码审查(重点:全面分析逻辑、性能问题)
3. 给出问题点分析,严格遵守以下5个要点
**统一评论格式要求:**
- 问题标题(带风险等级标识:🔴高风险 🟡中风险 🟢低风险)
- 问题描述
- 代码范围(文件名和具体行号;如果代码不多,请用代码块直接展示出来)
- 修改建议
- Markdown 格式,良好可读性
4. 最重要的任务:仅对高风险的问题点上报CR评论,上报CR时检查existing_comments.md是否存在相似评论,存在就不再添加,
**不存在相似评论**使用mcp aone的 comment_merge_request_changed_file 工具来为CR添加评论。

⚠️ 重要提醒:你在非交互式CI环境中运行,不能建议手动操作!必须自动执行工具调用!

要求:
- 严格注意底线:只看当前分支里变更的部分!不允许对当前分支未变更的部分添加任何评论
- 添加的评论必须添加到当前分支对应的行数位置,不允许错位添加!
- 仅采纳高风险问题
- 添加的评论必须检查是否已经存在相似评论,如果已经存在相似评论,就不要再添加评论了,
只有没有存在相似评论才调用工具添加评论
- 添加的评论必须追加到 existing_comments.md, 每次添加评论前必须检查是否在 existing_comments.md 
存在相似记录,存在就不能重复添加
- 类属性访问范围、接口访问范围 不添加评论
" &
level1_pid=$!

# Level 2 处理器 - 增量分析部分分析区域  
echo "启动 Level 2 处理器(增量分析)..."
timeout 1800 claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools "mcp__aone" --print "
作为[仓库: ${repo}, 分支: ${sourceBranch}]代码评审的 Level 2 处理器,专注增量分析:

1. 读取 level2_partial.md 中的部分分析区域
2. 重点关注新增的代码行(重点:新增逻辑正确性、兼容性、边界情况)
3. 避免与现有评论重复,只分析新增部分
4. 给出问题点分析,严格遵守以下5个要点
**统一评论格式要求:**
- 问题标题(带风险等级标识:🔴高风险 🟡中风险 🟢低风险)
- 问题描述
- 代码范围(文件名和具体行号;如果代码不多,请用代码块直接展示出来)
- 修改建议
- Markdown 格式,良好可读性
5. 最重要的任务:仅对高风险的问题点上报CR评论,上报CR时检查existing_comments.md是否存在相似评论,存在就不再添加,
**不存在相似评论**使用mcp aone的 comment_merge_request_changed_file 工具来为CR添加评论。

⚠️ 重要提醒:你在非交互式CI环境中运行,不能建议手动操作!必须自动执行工具调用!
要求:
- 严格注意底线:只看当前分支里变更的部分!不允许对当前分支未变更的部分添加任何评论
- 添加的评论必须添加到当前分支对应的行数位置,不允许错位添加!
- 仅采纳高风险问题
- 添加的评论必须检查是否已经存在相似评论,如果已经存在相似评论,就不要再添加评论了,只有没有存在相似评论才调用工具添加评论
- 添加的评论必须追加到 existing_comments.md, 每次添加评论前必须检查是否在 existing_comments.md 存在相似记录,存在就不能重复添加
- 类属性访问范围、接口访问范围 不添加评论
" &
level2_pid=$!

# Level 3 处理器 - 轻量重审变更影响
echo "启动 Level 3 处理器(变更影响重审)..."
timeout 1800 claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools "mcp__aone" --print "
作为[仓库: ${repo}, 分支: ${sourceBranch}]代码评审的 Level 3 处理器,专注变更影响重审:

1. 读取 level3_recheck.md 中需要重审的区域
2. 分析代码变更对现有逻辑的影响(重点:接口变更、业务逻辑风险)
3. 检查是否有破坏性变更或逻辑冲突
4. 给出问题点分析,严格遵守以下5个要点
**统一评论格式要求:**
- 问题标题(带风险等级标识:🔴高风险 🟡中风险 🟢低风险)
- 问题描述
- 代码范围(文件名和具体行号;如果代码不多,请用代码块直接展示出来)
- 修改建议
- Markdown 格式,良好可读性
5. 最重要的任务:仅对高风险的问题点上报CR评论,上报CR时检查existing_comments.md是否存在相似评论,存在就不再添加,
**不存在相似评论**使用mcp aone的 comment_merge_request_changed_file 工具来为CR添加评论。

⚠️ 重要提醒:你在非交互式CI环境中运行,不能建议手动操作!必须自动执行工具调用!
要求:
- 严格注意底线:只看当前分支里变更的部分!不允许对当前分支未变更的部分添加任何评论
- 添加的评论必须添加到当前分支对应的行数位置,不允许错位添加!
- 仅采纳高风险问题
- 添加的评论必须检查是否已经存在相似评论,如果已经存在相似评论,就不要再添加评论了,只有没有存在相似评论才调用工具添加评论
- 添加的评论必须追加到 existing_comments.md, 每次添加评论前必须检查是否在 existing_comments.md 存在相似评论,存在就不能重复添加!
- 类属性访问范围、接口访问范围 不添加评论
" &
level3_pid=$!

# 等待所有并行处理器完成(带超时监控)
echo "等待所有处理器完成(最多10分钟)..."
start_time=$(date +%s)
max_wait=1800  # 10分钟

while true; do
    current_time=$(date +%s)
    elapsed=$((current_time - start_time))
    
    # 检查是否超过最大等待时间
    if [ $elapsed -gt $max_wait ]; then
        echo "处理器运行时间超过 ${max_wait} 秒,强制终止..."
        kill $level1_pid $level2_pid $level3_pid 2>/dev/null
        echo "所有处理器已强制终止"
        break
    fi
    
    # 检查所有进程是否完成
    if ! kill -0 $level1_pid 2>/dev/null && ! kill -0 $level2_pid 2>/dev/null && ! kill -0 $level3_pid 2>/dev/null; then
        echo "所有处理器已完成"
        break
    fi
    
    # 显示进度
    running_count=0
    kill -0 $level1_pid 2>/dev/null && running_count=$((running_count + 1))
    kill -0 $level2_pid 2>/dev/null && running_count=$((running_count + 1))
    kill -0 $level3_pid 2>/dev/null && running_count=$((running_count + 1))
    
    echo "还有 ${running_count} 个处理器在运行中... (已运行 ${elapsed}s)"
    sleep 30  # 每30秒检查一次
done

echo "智能分层 AI 代码评审完成!"

# =============================================================================
# 验证步骤:检查是否真的添加了评论
# =============================================================================
echo "验证步骤: 检查AI是否真的添加了评论..."
claude --permission-mode acceptEdits --mcp-config mcp.json --allowedTools 
"mcp__aone__list_merge_request_comments" --print "
验证任务:
1. 使用 mcp__aone__list_merge_request_comments 工具重新获取CR的所有评论
2. 对比旧的existing_comments.md,检查是否有新的AI评论被添加
3. 如果没有发现新评论,明确报告'验证失败:AI未添加任何评论'
4. 如果发现了新评论,报告'验证成功:AI成功添加了X条评论'
"
# =============================================================================
# 完成总结
# =============================================================================
echo "
✅分析完成总结:
"
jobs:
  claude-code:
    image: alios-8u
    steps:
      - uses: checkout
      - uses: setup-env
        inputs:
          node-version: 20
          tnpm-version: 10
          tnpm-cache: true
      - id: Claude_Code_Run
        run: |-
          tnpm install -g @anthropic-ai/claude-code
          export ANTHROPIC_BASE_URL=${{params.ANTHROPIC_BASE_URL}}
          export ANTHROPIC_AUTH_TOKEN=${{params.ANTHROPIC_AUTH_TOKEN}}
          export ANTHROPIC_MODEL=${{params.ANTHROPIC_MODEL}}
          echo claude-code安装成功
          ${{params.shell}}
          

使用方式:如何让你的代码库一分钟快速接入

1. 在代码仓库的 持续集成 页面,点击 新建任务。

2. 在模板市场中,搜索 Claude Code AI CR 模板并引用。

image

3. 配置4个环境变量:

  • ANTHROPIC_BASE_URL : Claude Code 模型端点地址;
  • ANTHROPIC_AUTH_TOKEN : Claude Code 访问密钥;
  • ANTHROPIC_MODEL : 模型型号;
  • AONE_MCP_URL : Aone · 代码平台的MCP端口;
image

4. 确认一下,触发策略这里最后选上这2个时机(通配符规则自己定)。

image

5. 提交配置。

6. 随后,开启一个代码评审,即可触发。通过观测流水线日志和CR评论区,来判断是否运行成功。

💡 注意入参配置里的shell,不填的话会默认使用我提供的命令(见上面流水线的脚本)。如果你觉得效果不好,需要调整(确实有很多细节要调整),可以自己设置哦。

使用建议

为了获得更好的CR效果,建议在项目中:

  • 定制优化你的流水线Shell命令:当前流水线模板相当于提供了运行Claude Code的容器环境,里面如何执行命令、如何调用Claude Code,完全由你来自定义(将运行命令脚本填入入参配置里的shell字段,容器会在配置好Claude Code环境后,运行你的脚本)。
  • 维护好CLAUDE.md(如果不了解,请查一下Claude Code相关使用教程)。
  • 针对项目的特点, 优化prompt和工具调用 ,比如重要项目强调数据一致性问题的检查。
  • 建立起 需求文档在代码库中的维护 习惯,AI Coding后期本质上将会是文档工程,文档质量决定了Agent在代码研发周期里的提效上限。

后续优化方向

1. Background Agent 模式的应用:当前我们只是简单的对CR中变更代码,就“是否已经被分析过”来进行了简单的划分,然后并行执行。在不同的项目中,完全可以进行不同纬度的划分,来并行处理。

2. Sub Agent 模式的应用:是由Claude Code支持的模式,可以在一个agent实例中将任务分给不同的子agent去并行做不同的事,专人专职,分析力更强,减少了上下文限制和幻觉的影响。比如,对一个CR任务,可以建立起 代码规范检查agent、上下游业务影响分析agent、数据一致性分析agent、稳定性分析agent 的协作机制。

3. Prompt 工程、上下文工程的调优:如何在提出要求之前准备好模型可能需要的一切?

4. Memory 机制的建立:如何将整个代码库的历史变更、历史文档、历史CR,作为长期记忆留存下来并反哺?

总结

通过这次Claude Code AI CR流水线的实践,我们实现了包括但不限于:

  • 自动检测评审中的CR并进行智能分析;
  • 基于现有评论避免重复分析,提高效率;
  • 通过分层处理策略,针对不同复杂度的代码变更采用不同的分析深度;
  • 多个Claude Code实例并行处理,显著缩短分析时间;
  • 直接在CR页面添加结构化的评审意见,包含问题描述、风险等级、修改建议等;
  • 发现人工容易遗漏的潜在问题(如案例中的死循环阻塞问题);
  • 沉淀了可配置的流水线模板,支持一键部署和复用;

AI Coding Agent在代码评审场景的应用证明了其实用价值,50%+的提效 不仅减轻了人工负担,也提升了问题发现的广度和深度。 这套方案展示了将AI Agent集成到现有研发流程中的一种可行路径,为团队探索AI提效提供了具体的参考案例。

当然,这个方案更多是 给大家提供一个实践思路和技术起点 ,后续的优化空间还很大。

希望这次分享能启发更多团队探索AI Coding在自己业务场景中的应用可能性,共同推动研发效率的提升!欢迎大家尝试使用并提供反馈建议!

   
105   次浏览       8 次
相关文章

DevOps转型融入到企业文化
DevOps 能力模型、演进及案例剖析
基于 DevOps 理念的私有 PaaS 平台实践
微软开发团队的DevOps实践启示
相关文档

DevOps驱动应用运维变革与创新
运维管理规划
如何实现企业应用部署自动化
运维自动化实践之路
相关课程

自动化运维工具(基于DevOps)
互联网运维与DevOps
MySQL性能优化及运维培训
IT系统运维管理

最新活动计划
AI辅助企业网络安全与治理 6-11[北京]
基于模型的数据治理 6-16[北京]
Spec 驱动开发(SDD)实战 6-12[北京]
具身智能技能与实践 6-11[厦门]
AI智能体开发技术实践 6-24[上海]
AI辅助软件测试方法与实践 6-26[在线]
 
 
最新文章
DevOps 道法术器,立体化实施框架
DevOps 中高效测试基础架构的最佳实践
DevOps 在公司项目中的实践落地
如何基于 Kubernetes 构建完整的 DevOps 流水线
阿里云Kubernetes实战
最新课程
DevOps体系实践、工具与平台
基于Kubernetes的DevOps实践
互联网运维与DevOps
基于Kubernetes构建企业容器云
企业级DevOps工作体系与平台
更多...   
成功案例
北京 DevOps体系实践、工具与平台
神龙汽车 DevOps体系实践、工具与平台
中国移动通信 网络规划与管理
某航空公司 IT规划与企业架构
某金融公司 IT服务管理(ITIL V3)
更多...