亚马逊AWS官方博客
使用 Amazon Q Developer 构建企业自动化代码审核流程
![]() |
前言
在软件开发流程中,代码审核是确保代码质量的关键环节。传统的代码审核通常依赖于团队成员之间的相互审查,这不仅耗时,而且可能受到审核者经验和专业知识的限制。随着生成式 AI 的发展,越来越多的团队,也开始借助生成式 AI 的能力进行代码审核。
Amazon Q Developer 是亚马逊推出的专为专业开发人员设计的人工智能助手,旨在提升代码开发和管理效率。其主要功能包括代码生成、调试、故障排除和安全漏洞扫描,提供一站式代码服务。本文主要介绍其代码审核的能力。你可以在亚马逊云科技控制台、IDE 插件、以及命令行工具(CLI)等地方中使用到 Amazon Q Developer。Amazon Q Developer for IDE 可以作为开发人员开发过程中自检的审核助手;在开发阶段进行代码质量提升,而 Amazon Q Developer for CLI 提供了命令行工具,让企业可以结合自有的 CI/CD 流程进行代码审核。
使用 Amazon Q Developer 进行自动化的代码审核方案,具有以下优势:
- 一致性:应用统一的代码审核标准
- 效率:快速完成审核,减少人工审核时间
- 全面性:能够检查多方面的问题,包括代码风格、质量、安全性等
- 可集成性:可以轻松集成到 CI/CD 流程中
- 持续学习:基于大量代码库训练,能够识别最新的最佳实践
而 Amazon Q Developer For CLI 在命令行界面中已集成了上下文感知、环境感知、Agent 执行等多种能力,比起直接调用大模型,可减少企业集成时的工程化时间,不必再重复造轮子。
接下来,我们将介绍两个场景的代码审核场景:(1)在开发过程中进行代码审核;(2)在 CI/CD 过程中使用 Amazon Q Developer 进行代码审核。本文不再针对如何安装 Amazon Q Developer 等进行介绍,您可以参考官方文档进行安装(在 IDE 中安装 Amazon Q/在命令行中安装 Amazon Q)。同时 Amazon Q Developer 分为个人用户和企业用户,由于个人用户每月有一定限额,建议在企业内部使用企业用户以获取更多的使用额度。
1. 开发期间 – Amazon Q Developer IDE
Amazon Q Developer 可以检查您的代码库中是否存在安全漏洞和代码质量问题,以改善应用程序在整个开发周期中的状况。
Amazon Q 会检查您的代码是否存在以下类型的代码问题:
- SAST 扫描 – 检测源代码中的安全漏洞。Amazon Q 可识别各种安全问题,例如资源泄漏、SQL 注入和跨站脚本。
- 机密检测 – 防止泄露代码中的敏感或机密信息。Amazon Q 会检查您的代码和文本文件中是否有硬编码密码、数据库连接字符串和用户名等机密。机密调查结果包括有关未受保护的机密以及如何保护它的信息。
- IaC 问题 – 评估基础架构文件的安全状况。Amazon Q 可以审查您的基础设施即代码(IaC)代码文件,以检测配置错误、合规性和安全问题。
- 代码质量问题 – 确保您的代码符合质量、可维护性和效率标准。Amazon Q 会生成与各种质量问题相关的代码问题,包括但不限于性能、机器学习规则和 AWS 最佳实践。
- 代码部署风险 – 评估与部署代码相关的风险。Amazon Q 会确定部署或发布您的代码是否存在任何风险,包括应用程序性能和操作中断。
- 软件组成分析(SCA)- 评估第三方代码。Amazon Q 会检查集成到您的代码中的第三方组件、库、框架和依赖关系,确保第三方代码是安全和最新的。
如需查看 Amazon Q 用于审查您的代码的探测器的完整列表,请参阅 Amazon Q 探测器库。
当你编写代码时,Amazon Q Developer 会自动审查您正在编写的文件,一旦在您的代码中检测到代码问题,就会立即生成代码问题。当 Amazon Q 执行自动审查时,它不会生成就地代码修复。当您使用 Amazon Q 时,自动审核默认处于启用状态。我们也可以在 IDE 的 Amazon Q chat 框中手动执行/review,进行代码审核。以下为一个演示(可点击查看大图):
![]() |
2. CI/CD 期间 – Amazon Q Developer CLI
以下为使用 Amazon Q Developer CLI 进行代码审核的效果(可点击查看大图)::
![]() |
以下是代码审核结果的样例,实际生产中我们可以对审核规则,以及审核报告格式进行自定义:
接下来,我将详细介绍如何通过 GitLab CI/CD 流程集成 Amazon Q CLI 来实现自动化代码审核。
2.1 代码审核的前提条件
- AWS 账户并已启用 Amazon Q Developer
- GitLab 环境,配置好 GitLab Runner,适用于 GitLab api 调用的相关 token
- Docker 环境
- AWS ECR 仓库用于存储自定义 Docker 镜像
- S3 桶,可以访问此 S3 桶的用户或者角色
- 本节所用代码均可在此 Github 仓库中找到。代码结构如下:
接下来,您可以参考以下步骤,在团队中实现使用 Amazon Q developer CLI 协助实现代码审核。
2.2 整体流程
实现基于以下流程:
- 开发者提交代码或创建合并请求
- GitLab CI/CD 流程触发
- 使用预配置的 Docker 镜像运行 Amazon Q Developer CLI 进行代码审核
- Amazon Q Developer CLI 分析代码变更并生成审核报告
- 审核结果作为评论添加到合并请求中
![]() |
2.3 环境准备
2.3.1 Amazon Q Developer CLI 登录权限
Amazon Q developer CLI 目前需要交互性登录,但对于审核流程,我们需要将登录自动化,因此我们需要将认证后的凭据给到 Gitlab runner 使用。首先我们需要找一台服务器,以 Linux(Ubuntu)为例,安装并登录 Amazon Q(登录过程参考此文档),登录后凭据存储在`~/.local/share/amazon-q/
`。
为了对 CI/CD 上下文进行身份验证,我们需要将其持久化到某个共享位置。我在这个例子中使用了 S3,但这包含敏感数据,因此建议使用 S3 VPC 端点,并限制对此 S3 桶的访问权限来源,比如限定 IP 等等。
使用以下命令将凭据上传到 S3:
2.3.2 Docker 镜像准备
我们需要创建一个包含 Amazon Q CLI 和必要工具的 Docker 镜像,作为 GitLab pipeline 运行的环境,其 Dockerfile 如下:
镜像中包含:
- Amazon Q CLI
- AWS CLI
- Git
- Python 环境
将此 Dockerfile 打包成镜像,并上传到私有镜像仓库中,此处我们选择 AWS ECR,并记录镜像名称。
2.3.3 GitLab 环境准备
- 准备一台 EC2 安装 Gitlab runner,并给此 EC2 一个角色,具备 AmazonEC2ContainerRegistryFullAccess 以及 AmazonS3FullAccess 权限,注册该 runner 时,注意选择 tag 为
ubuntu,docker,amazon-q
,以便后续的 runner 运行节点选择,以下为注册 tag 的参考命令: - 准备一个 Gitlab Token,具备 API 全权限,用于审核完成后调用 API 填写 comment。
- 设置 GitLab 变量,给流程使用。
- 变量二,Key 为
REGISTRATION_TOKEN
,值为上一步中的 Gitlab Token,由于此为密钥,所以设置 Visibility 为 Masked,Flags 为 Expand variable reference,其他参考如上图。 - 变量三,Key 为
Region
,值为 AWS ECR 的所在 region,Visibility 为 Visible,Flags 为 Expand variable reference。 - 变量四,Key 为
Accountid
,值为 AWS ECR 的所在账户 ID,Visibility 为 Visible,Flags 为 Expand variable reference。 - 变量五,Key 为
Image
,值为上一步 Docker 镜像的名称,Visibility 为 Visible,Flags 为 Expand variable reference。
2.4 GitLab CI/CD 配置
审核阶段的主要步骤包括:
- 克隆完整仓库
- 确定需要审核的代码变更
- 同步 Amazon Q 配置(如果有)
- 运行 Amazon Q CLI 进行代码审核
- 保存审核结果
审核流程所用的 .gitlab-ci.ym 文件如下,注意将${Region}、${Accountid}、${Image}进行替换,其中${Image}为上一步上传到 ECR 的镜像名称。
2.5 审核流程详解
当开发者创建合并请求时,GitLab CI/CD 流程会自动触发,执行以下步骤:
1. 确定变更文件:使用 Git 命令确定合并请求中的变更文件,并将文件列表保存到 changes.txt
2. 运行 Amazon Q CLI:使用预定义的提示运行 Amazon Q CLI 进行代码审核,审核完成后,Amazon Q 会生成一个 Markdown 格式的审核报告,包含对代码的分析和改进建议。这个报告会通过 Python 脚本 put_comment.py
添加到合并请求的评论中,使开发者能够直接在 GitLab 界面查看审核结果。
以下是 Prompt 的样例:
我们使用了一套完整的代码审核规则,这些规则分为四个部分:
- 一般原则、代码风格和代码质量
- 功能实现、安全性和性能
- 测试、日志记录、可维护性和特定场景
- 语言特定检查点、中间件使用指南和通信指南
这些规则存储在项目的 improve_rules
目录中,作为 Amazon Q 的提示输入。
3. 保存审核结果:将审核结果保存为 CI/CD 流程的构件,以便下载查看。
2.6 自定义与扩展
本代码审核的流程,可以根据团队需求进行自定义和扩展:
- 调整审核规则:修改
improve_rules
目录中的文件,定制适合团队的代码审核标准 - 增强审核报告:修改 Amazon Q 提示,调整审核报告的格式和内容
- 集成其他工具:在 CI/CD 流程中添加其他代码质量工具,与 Amazon Q 审核结果结合
- 自动修复:扩展实现,使 Amazon Q 不仅提供建议,还能自动修复某些问题
- 增加安全控制:沙箱运行 Amazon Q Developer CLI,减少 API 和 IAM 的相关权限等
2.7 Amazon Q Developer CLI 的智能体能力详解
在 2.5 审核流程详解中,我们利用 prompt 让 Amazon Q 完成了代码审核、审核结果写入文件、调用脚本将审核结果上传到 Gitlab 等操作。使用到了 Amazon Q Developer CLI 的强大的智能体能力,以下为 Gitlab 的运行日志,我们可以来观察一下 Amazon Q 的运行过程。
![]() |
![]() |
最终,Q 完成了自己的任务,在 Merge 流程中写上了自己的评论!
![]() |
总结
在本篇博客中,我们通过 Amazon Q Developer 实现了代码开发的审核,通过 Amazon Q Developer IDE,我们在开发阶段扫描出代码安全问题,提升了代码质量。通过将 Amazon Q CLI 集成到 GitLab CI/CD 流程中,我们实现了一个自动化的代码审核系统。这个系统能够在开发者提交代码或创建合并请求时,自动分析代码变更,提供全面的审核意见,帮助团队保持高质量的代码标准。
Amazon Q CLI 的 AI 能力使得代码审核不再仅仅依赖于团队成员的人工审查,而是能够借助 AI 的力量,更快速、更全面地发现潜在问题。这不仅提高了开发效率,也有助于团队成员学习和遵循最佳实践。而 Amazon Q Developer CLI 的智能体模式,还可以在流程遇到问题时自我修复,保证流程的运行顺利。
随着 Amazon Q 功能的不断增强,我们可以期待这个自动化代码审核系统在未来变得更加智能和有效,为软件开发流程带来更多价值。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。
参考文档
Automating Code Reviews with Amazon Q and GitHub Actions