使用 Amazon Q Developer 构建企业自动化代码审核流程
文章目录
- 前言
- 1. 开发期间 – Amazon Q Developer IDE
- 2. CI/CD 期间 – Amazon Q Developer CLI
- 2.1 代码审核的前提条件
- 2.2 整体流程
- 2.3 环境准备
-
- 2.3.1 Amazon Q Developer CLI 登录权限
- 2.3.2 Docker 镜像准备
- 2.3.3 GitLab 环境准备
- 2.4 GitLab CI/CD 配置
- 2.5 审核流程详解
- 2.6 自定义与扩展
- 2.7 Amazon Q Developer CLI 的智能体能力详解
- 总结
新用户可获得高达 200 美元的服务抵扣金。
亚马逊云科技新用户可以免费使用亚马逊云科技免费套餐(Amazon Free Tier)。注册即可获得 100 美元的服务抵扣金,在探索关键亚马逊云科技服务时可以再额外获得最多 100 美元的服务抵扣金。使用免费计划试用亚马逊云科技服务,最长可达 6 个月,无需支付任何费用,除非您选择付费计划。付费计划允许您扩展运营并获得超过 150 项亚马逊云科技服务的访问权限。
前言
在软件开发流程中,代码审核是确保代码质量的关键环节。传统的代码审核通常依赖于团队成员之间的相互审查,这不仅耗时,而且可能受到审核者经验和专业知识的限制。随着生成式 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 会生成与各种质量问题相关的代码问题,包括但不限于性能、机器学习规则和 亚马逊云科技 最佳实践。
- 代码部署风险 – 评估与部署代码相关的风险。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 环境
- Amazon ECR 仓库用于存储自定义 Docker 镜像
- S3 桶,可以访问此 S3 桶的用户或者角色
本节所用代码均可在此 Github 仓库中找到。代码结构如下:
├── .gitlab-ci.yml #gitlab cicd 所用的pipeline├── Dockerfile # gitlab pipeline运行时所用docker 镜像├── ewallet # 测试使用的代码├── improve_rules # 审核规则│ ├── improved_code_review_standards_part1.md #包含一般原则、代码审查流程和检查清单的第一部分(代码风格和代码质量)│ ├── improved_code_review_standards_part2.md #包含功能实现、安全性和性能部分│ ├── improved_code_review_standards_part3.md #包含测试、日志记录、可维护性和特定场景,如并发、事务、幂等性和远程调用│ ├── improved_code_review_standards_part4.md #包含语言特定的检查点、中间件使用指南、通信指南、工具推荐和持续改进│ └── llm_code_review_feedback_format.md # 审核报告规则└── put_comment.py # 审核结束调用api填写评论的代码
接下来,您可以参考以下步骤,在团队中实现使用 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:
aws s3 sync ~/.local/share/amazon-q s3://<amazon-q-bucket>/amazonq-credentials/amazon-q #替换为你自己的S3桶,并记录这个地址
2.3.2 Docker 镜像准备
我们需要创建一个包含 Amazon Q CLI 和必要工具的 Docker 镜像,作为 GitLab pipeline 运行的环境,其 Dockerfile 如下:
# 基于Ubuntu 22.04FROM ubuntu:22.04# 避免交互式提示ENV DEBIAN_FRONTEND=noninteractive# 安装必要的软件包RUN apt-get update && \\ apt-get install -y \\ curl \\ git \\ jq \\ python3 \\ python3-pip \\ apt-transport-https \\ ca-certificates \\ gnupg \\ lsb-release \\ software-properties-common \\ sudo && \\ rm -rf /var/lib/apt/lists/*# 添加GitLab Runner仓库RUN curl -L \"https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh\" | bash# 安装GitLab Runner# 如果要安装指定版本的runner,类似于apt install gitlab-runner=17.7.1-1RUN apt-get update && \\ apt-get install -y gitlab-runner && \\ rm -rf /var/lib/apt/lists/*# 安装AWS CLIRUN pip3 install --no-cache-dir awscli requests && pip install requests# 安装Amazon Q CLIRUN curl --proto \'=https\' --tlsv1.2 -sSf https://desktop-release.q.us-east-1.amazonaws.com/latest/amazon-q.deb -o amazon-q.deb && \\ apt-get update && \\ apt-get install -y ./amazon-q.deb && \\ rm amazon-q.deb && \\ rm -rf /var/lib/apt/lists/*# 创建配置目录RUN mkdir -p /etc/gitlab-runner
镜像中包含:
- Amazon Q CLI
- Amazon CLI
- Git
- Python 环境
将此 Dockerfile 打包成镜像,并上传到私有镜像仓库中,此处我们选择 Amazon ECR,并记录镜像名称。
2.3.3 GitLab 环境准备
- 准备一台 EC2 安装 Gitlab runner,并给此 EC2 一个角色,具备
AmazonEC2ContainerRegistryFullAccess
以及AmazonS3FullAccess
权限,注册该 runner 时,注意选择 tag 为 ubuntu,docker,amazon-q,以便后续的 runner 运行节点选择,以下为注册 tag 的参考命令:
gitlab-runner register --registration-token \"\" --url \"\" --tag-list \"ubuntu,docker,amazon-q\" --non-interactive
- 准备一个 Gitlab Token,具备 API 全权限,用于审核完成后调用 API 填写 comment。
- 设置 GitLab 变量,给流程使用。
变量一,Key 为 AMAZON_Q_S3_URI,值为 2.3.1 Amazon Q developer CLI 登录权限中创建的 S3 路径,Visibility 为 Visible,Flags 为 Expand variable reference。
变量二,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 的镜像名称。
stages: - build - reviewlogin_ecr: stage: build script: - aws ecr get-login-password --region ${Region} | docker login --username AWS --password-stdin ${Accountid}.dkr.ecr.${Region}.amazonaws.comvariables: # 定义 Amazon Q 提示 PROMPT: | 你是一个代码审核助手,以下文件中包含代码审核规则 improve_rules/improved_code_review_standards_part1.md - 包含一般原则、代码审查流程和检查清单的第一部分(代码风格和代码质量) improve_rules/improved_code_review_standards_part2.md - 包含功能实现、安全性和性能部分 improve_rules/improved_code_review_standards_part3.md - 包含测试、日志记录、可维护性和特定场景,如并发、事务、幂等性和远程调用 improve_rules/improved_code_review_standards_part4.md - 包含语言特定的检查点、中间件使用指南、通信指南、工具推荐和持续改进 请审核changes.txt中的修改,但不要直接修改文件,以中文输出,并参考improve_rules/llm_code_review_feedback_format.md中的推荐格式进行输出至文件amazon_q_review.md中。完成后,请检查amazon_q_review.md确保所需内容完整。审核完成后运行python脚本put_comment.py将审核结果添加到merge comment中,运行完成后回复完成,不需要对任务做总结,运行过程中不要修改任何文件。然后退出运行q cliamazon-q-code-review: stage: review variables: GIT_STRATEGY: clone # 使用clone确保获取完整仓库 # 使用您已配置的 Runner 标签 tags: - ubuntu - docker - amazon-q # GitLab CI/CD 配置文件# 使用预配置的 GitLab Runner 运行 Amazon Q 代码审查 image:${Image} script: - echo \"CI_MERGE_REQUEST_IID $CI_MERGE_REQUEST_IID\" - echo \"CI_MERGE_REQUEST_TARGET_BRANCH_NAME $CI_MERGE_REQUEST_TARGET_BRANCH_NAME\" - echo \"CI_MERGE_REQUEST_SOURCE_BRANCH_NAME $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME\" - echo \"CI_COMMIT_BEFORE_SHA $CI_COMMIT_BEFORE_SHA\" - echo \"CI_COMMIT_SHA $CI_COMMIT_SHA\" - echo \"AMAZON_Q_S3_URI $AMAZON_Q_S3_URI\" - echo \"REGISTRATION_TOKEN $REGISTRATION_TOKEN\" - git branch -a - git fetch --all --prune - touch changes.txt - echo \"Processing changes...\" - if [ -n \"$CI_MERGE_REQUEST_IID\" ]; then git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_NAME $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME > changes.txt 2>/dev/null || git diff --name-only origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME origin/$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME > changes.txt 2>/dev/null || git diff --name-only HEAD~1 HEAD > changes.txt 2>/dev/null || echo \"No changes detected\" > changes.txt; fi - if [ -z \"$CI_MERGE_REQUEST_IID\" ]; then git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA > changes.txt 2>/dev/null || git diff --name-only HEAD~1 HEAD > changes.txt 2>/dev/null || echo \"No changes detected\" > changes.txt; fi - if [ -n \"$AMAZON_Q_S3_URI\" ]; then aws s3 sync $AMAZON_Q_S3_URI ~/.local/share/amazon-q; fi - ls -l ~/.local/share/amazon-q - echo \"/help\" | q chat - q chat -a -- \"$PROMPT\" - mv amazon_q_review.md amazon_q_review_$CI_PIPELINE_ID.md # 定义何时运行此作业 rules: - if: $CI_PIPELINE_SOURCE == \"merge_request_event\" when: always - when: never artifacts: paths: - amazon_q_review_$CI_PIPELINE_ID.md expire_in: 1 month
2.5 审核流程详解
当开发者创建合并请求时,GitLab CI/CD 流程会自动触发,执行以下步骤:
- 确定变更文件:使用 Git 命令确定合并请求中的变更文件,并将文件列表保存到 changes.txt
git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_NAME $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME > changes.txt
- 运行 Amazon Q CLI:使用预定义的提示运行 Amazon Q CLI 进行代码审核,审核完成后,Amazon Q 会生成一个 Markdown 格式的审核报告,包含对代码的分析和改进建议。这个报告会通过 Python 脚本 put_comment.py 添加到合并请求的评论中,使开发者能够直接在 GitLab 界面查看审核结果。
q chat -a -- \"$PROMPT\"
以下是 Prompt 的样例:
你是一个代码审核助手,以下文件中包含代码审核规则 improve_rules/improved_code_review_standards_part1.md - 包含一般原则、代码审查流程和检查清单的第一部分(代码风格和代码质量) improve_rules/improved_code_review_standards_part2.md - 包含功能实现、安全性和性能部分 improve_rules/improved_code_review_standards_part3.md - 包含测试、日志记录、可维护性和特定场景,如并发、事务、幂等性和远程调用 improve_rules/improved_code_review_standards_part4.md - 包含语言特定的检查点、中间件使用指南、通信指南、工具推荐和持续改进 请审核changes.txt中的修改,但不要直接修改文件,以中文输出,并参考improve_rules/llm_code_review_feedback_format.md中的推荐格式进行输出至文件amazon_q_review.md中。完成后,请检查amazon_q_review.md确保所需内容完整。审核完成后运行python脚本put_comment.py将审核结果添加到merge comment中,运行完成后回复完成,不需要对任务做总结,运行过程中不要修改任何文件。然后退出运行q cli
我们使用了一套完整的代码审核规则,这些规则分为四个部分:
- 一般原则、代码风格和代码质量
- 功能实现、安全性和性能
- 测试、日志记录、可维护性和特定场景
- 语言特定检查点、中间件使用指南和通信指南
这些规则存储在项目的 improve_rules 目录中,作为 Amazon Q 的提示输入。
- 保存审核结果:将审核结果保存为 CI/CD 流程的构件,以便下载查看。
mv amazon_q_review.md amazon_q_review_$CI_PIPELINE_ID.md
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 功能的不断增强,我们可以期待这个自动化代码审核系统在未来变得更加智能和有效,为软件开发流程带来更多价值。
以上就是本文的全部内容啦。最后提醒一下各位工友,如果后续不再使用相关服务,别忘了在控制台关闭,避免超出免费额度产生费用~