1. 📖 简介

在此 Codelab 中,您将学习 Gemini CLI 的基础知识,并在软件开发工作流程中利用其代码审核和安全分析扩展程序。
学习内容
- 如何设置 Gemini CLI
- 如何配置 Gemini CLI
- 如何安装 Gemini CLI 扩展程序
- 如何利用 Gemini CLI 扩展程序进行代码审核和安全分析
- 如何为 Gemini CLI 配置 MCP
- 如何在 CI/CD 中检查 Gemini CLI
所需条件
- Chrome 网络浏览器
- Gmail 账号
- 启用了结算账号的 Cloud 项目
2. 🚀 准备工作坊开发设置
第 1 步:在 Cloud 控制台中选择有效项目
在 Google Cloud 控制台的项目选择器页面上,选择或创建一个 Google Cloud 项目(请参阅控制台的左上角部分)

点击该链接后,您会看到所有项目的列表,如以下示例所示:

红框中显示的值是项目 ID,本教程中会一直使用此值。
确保您的 Cloud 项目已启用结算功能。如需查看此信息,请点击左上角栏中的汉堡图标 ☰,该图标会显示导航菜单,然后找到“结算”菜单


如果您在结算 / 概览标题(云控制台的左上角部分)下看到“Google Cloud Platform 试用结算账号”,则表示您的项目已准备就绪,可以用于本教程。如果不是,请返回本教程的开头,兑换试用结算账号

第 2 步:熟悉 Cloud Shell
在教程的大部分内容中,您将使用 Cloud Shell。点击 Google Cloud 控制台顶部的“激活 Cloud Shell”。如果系统提示您授权,请点击授权


连接到 Cloud Shell 后,我们需要检查 shell(或终端)是否已通过我们的账号进行身份验证
gcloud auth list
如果您看到个人 Gmail 地址,如以下示例输出所示,则一切正常
Credentialed Accounts
ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com
To set the active account, run:
$ gcloud config set account `ACCOUNT`
如果不是,请尝试刷新浏览器,并确保在系统提示时点击授权(连接问题可能会导致授权中断)
接下来,我们还需要检查 shell 是否已配置为正确的 PROJECT ID。如果您看到终端中 $符号前的括号内有值(在下面的屏幕截图中,该值为 “your-workshop-project”),则表示您的活跃 shell 会话已配置项目。

如果显示的值已正确,您可以跳过下一个命令。不过,如果该值不正确或缺失,请运行以下命令
gcloud config set project <YOUR_PROJECT_ID>
第 3 步:熟悉 Cloud Shell 编辑器并设置应用工作目录
现在,我们可以设置代码编辑器来执行一些编码操作。我们将使用 Cloud Shell 编辑器来完成此
点击打开编辑器按钮,系统会打开 Cloud Shell 编辑器 
现在,您将看到 Cloud Shell Editor 界面,如下所示

现在,克隆我们将与之互动的演示代码库。首先,我们需要打开编辑器的终端。您可以在菜单栏中点击 Terminal -> New Terminal 来打开终端,也可以使用 Ctrl + Shift + C 快捷键,这会在浏览器的底部打开一个终端窗口

然后在终端上运行此命令
git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo
之后,前往 Cloud Shell 编辑器的顶部部分,依次点击文件 -> 打开文件夹,找到您的用户名目录,然后找到克隆的代码库目录 code-analysis-demo,最后点击“确定”按钮。这样一来,所选目录就会成为主工作目录。在此示例中,用户名为 alvinprayuda,因此目录路径如下所示


现在,您的 Cloud Shell 编辑器工作目录应如下所示

现在,我们可以进入下一阶段了
3. 🚀 设置和配置
如果您想在本地系统中安装 Gemini CLI,可以按以下步骤操作:
- 确保您的系统已安装 Node 版本 20 或更高版本
- 通过以下任一方式启用 Gemini CLI:
- 将其安装为全局软件包
# Install as an executor
npm install -g @google/gemini-cli
# then run it from terminal
gemini
- 或者直接从来源运行,以便始终获取最新版本
npx https://github.com/google-gemini/gemini-cli
首次运行时,系统会询问您几个问题。如果您从 IDE(例如 VSCode)运行该命令,系统会询问您以下问题

然后,系统会提供多种身份验证选项

有以下几个选项:
- 如果您选择使用 Google 账号登录,系统会在浏览器中打开 Google 身份验证页面,您只需接受即可
- 如果您想使用 Gemini API 密钥,则需要在 AI Studio 页面中创建一个密钥,然后在工作目录中创建 .env 文件并设置变量 GEMINI_API_KEY(或在命令行中运行命令
export GEMINI_API_KEY="your-api-key") - 如果您选择使用 Vertex AI,则需要一个像您之前设置的项目,并创建 .env 文件并设置 GOOGLE_CLOUD_PROJECT 和 GOOGLE_CLOUD_LOCATION
如果您想更改这些身份验证方法,可以从 Gemini CLI 运行 /auth 命令,也可以修改配置文件。如果您想直接修改配置文件,在 Linux 上,该文件应位于 $HOME/.gemini/settings.json 中。您将看到 security 和 auth 类型,并可对其进行修改
{
"security": {
"auth": {
"selectedType": "vertex-ai" # or "gemini-api-key" or "oauth-personal"
}
}
}

4. 🚀 基本命令和内置工具
现在,让我们来试用一下 Gemini CLI,以便详细了解它。如果您正在寻找一些可用的基本命令,可以输入 /help 来显示所有可用的命令

/help
您将看到如下输出 
Gemini CLI 是一款 AI 智能体,因此它会配备工具来解决用户给定的任务。如需查看其内置工具,请运行 /tools 命令

/tools
系统会显示如下输出

您可以看到,Gemini CLI 具有多种功能,例如读写文件、网络搜索等。由于存在潜在风险,其中一些工具默认需要用户确认
现在,我们来看看实际用例,尝试在 Gemini CLI 中运行以下提示

Find top 10 OWASP security issue and write it down to owasp.md
您会看到,它将调用 GoogleSearch 工具,然后使用 WriteFile 写入结果。如果您使用 IDE,您会看到它会以差异和显示选项的形式呈现,让您选择接受还是拒绝建议。在此处,您可以看到 Gemini CLI 会请求您授予写入文件的权限

5. 🚀 扩展服务
为了改进 AI 智能体在特定任务中的输出,我们需要考虑如何精心设计合适的提示、如何通过合适的工具集成来管理合适的上下文工程等。
Gemini CLI 扩展程序是预先打包且易于安装的提示和集成,可连接到外部工具。每个扩展程序都包含一个内置的“使用指南”,用于说明如何有效地使用工具,并且可以包含以下组件:
- 自定义斜杠命令
- MCP 配置
- 上下文的描述文件

安装安全扩展服务
例如,在本教程中,我们将探讨如何安装 code-review 和 security 扩展程序
运行以下命令以从终端安装 security 扩展程序
gemini extensions install https://github.com/gemini-cli-extensions/security
系统会显示以下问题,只需按 Enter 键即可接受
Installing extension "gemini-cli-security". **Extensions may introduce unexpected behavior. Ensure you have investigated the extension source and trust the author.** This extension will run the following MCP servers: * securityServer (local): node /home/alvinprayuda/.gemini/extensions/gemini-cli-security/mcp-server/dist/security.js This extension will append info to your gemini.md context using GEMINI.md Do you want to continue? [Y/n]: Extension "gemini-cli-security" installed successfully and enabled.
安装代码审核扩展程序
接下来,我们来安装 code-review 扩展程序,运行以下命令
gemini extensions install https://github.com/gemini-cli-extensions/code-review
完成后,再次运行 Gemini CLI
gemini
并运行 /extensions 命令,您会看到这两个扩展程序已安装

/extensions
好了,现在让我们对之前克隆的示例代码库进行实际执行
6. 🚀 交互模式 - 代码安全分析扩展程序应用
安全扩展程序是一款开源 Gemini CLI 扩展程序,旨在增强代码库的安全性。该扩展程序为 Gemini CLI 添加了一个新命令,用于分析代码更改以识别各种安全风险和漏洞。
现在,我们先准备演示代码库,运行以下命令以切换到已应用安全风险变更的分支
git checkout refactor/analysis-demo
之后,在终端中运行 Gemini CLI
gemini
然后,我们运行扩展程序

/security:analyze
这将启动一个长时间运行的进程,在此过程中,您会收到多次中断,要求您授予运行特定操作(例如 mkdir)的权限,如下所示

这是一种保护机制,可确保用户了解 Gemini CLI 将执行的操作。在本教程的其余部分中,您可以始终允许该权限(选项 2)。
此扩展程序将调用一个长时间运行的进程,您可以看到它在 .gemini_security 目录中创建一个规划文件,并且可以看到清单中显示了哪些进程已完成,哪些进程尚未完成。如下例所示:

它需要一些时间才能完成任务,在等待期间,我们可以前往 GitHub 代码库查看这些扩展程序的来源。此网址显示了用于运行所有这些安全扫描流程的提示

如您所见,为了实现此扫描,我们提示 Gemini CLI 执行双重检查,即侦察阶段和更详细的调查阶段。
如果您在 Gemini CLI 中遇到以下提示,可以选择选项 2 来停用循环检测

然后,提示 Gemini CLI 继续

continue
这是一种避免无限低效工具调用循环的机制,并且会随着时间的推移不断改进。
完成后,它将在交互式终端上显示报告,为了方便起见,我们指示 Gemini CLI 将报告写入 security-analysis.md

write the result to security-analysis.md file
现在,您可以检查写入到文件中的结果
7. 🚀 非交互模式 - 代码审核扩展程序应用
code-review 扩展程序为 Gemini CLI 添加了一个新命令,用于分析代码更改以识别各种代码质量问题。
此扩展程序可在 Gemini CLI 非互动模式下执行,这意味着整个流程无需进入 Gemini CLI shell 即可执行。如需在非互动模式下运行 Gemini CLI,您可以使用以下命令模式
gemini "put your command here"
不过,请务必注意,在非互动模式下运行会停用任何需要用户权限的工具操作,因此我们需要添加 --yolo 标志来自动批准所有操作,这意味着在非互动模式下启用所有工具
我们使用以下命令运行 code-review 扩展程序
gemini "/code-review" --yolo -e code-review > code-review.md
此命令会将 Gemini CLI 输出的结果写入 code-review.md 文件。请注意此处的 -e 标志,此标志用于控制在会话期间激活哪个扩展程序。在此示例中,我们仅启用 code-review 扩展程序,并停用其他扩展程序。
这需要一段时间,但完成后,您可以在 Markdown 文件中看到类似如下所示的结果
Here are the results of the code review.
While the recent changes to rename `get_products` and `get_product` to `GetProducts` and `GetProduct` are minor, the codebase has some inconsistencies in its naming conventions. For instance, other functions like `create_product` use `snake_case`, while the newly renamed functions use `PascalCase`. For better code quality and readability, I recommend using a consistent naming convention throughout the project.
More importantly, I have identified several security vulnerabilities in the `main.py` file. Here is a summary of the findings:
### 1. SQL Injection
* **Severity**: High
* **Location**:
* `main.py:99` in `get_products_by_category`
* `main.py:146` in `search_products`
* `main.py:372` in `get_user_transactions`
* `main.py:438` in `adjust_inventory_by_query`
* **Description**: The endpoints directly use f-strings to construct SQL queries, making them vulnerable to SQL injection attacks. An attacker could manipulate the input to execute arbitrary SQL commands, potentially leading to data breaches or unauthorized modifications.
* **Recommendation**: Use parameterized queries or an ORM to handle database interactions. This will ensure that user input is properly sanitized and prevent SQL injection attacks.
### 2. Server-Side Request Forgery (SSRF)
* **Severity**: High
* **Location**: `main.py:265` in `fetch_url`
* **Description**: The `fetch_url` endpoint allows users to specify an arbitrary URL, which the server then requests. This can be exploited to make requests to internal services or local files, leading to information disclosure or other security breaches.
* **Recommendation**: Implement a whitelist of allowed domains or protocols to restrict the URLs that can be requested. Additionally, you can disable redirects and use a timeout to limit the impact of an attack.
### 3. Information Exposure
* **Severity**: Medium
* **Location**: `main.py:423` in `get_environment_variables`
* **Description**: The `get_environment_variables` endpoint exposes all environment variables to the user. This can include sensitive information such as API keys, database credentials, and other secrets.
* **Recommendation**: Remove this endpoint or restrict access to it to authorized users. If you need to expose some environment variables, do so selectively and avoid exposing sensitive information.
8. 🚀 Model Context Protocol 支持
现在,正如我们在扩展程序说明中检查的那样,Gemini CLI 可以连接到 MCP 服务器,即通过 Model Context Protocol 提供工具和资源的应用程序。通过此连接,Gemini CLI 可以使用 MCP 服务器作为本地环境和外部服务(如 API)之间的桥梁,与外部系统和数据源进行交互。

如果您想自行设置 MCP 服务器,则需要修改 .gemini/settings.json 文件并添加以下配置:
{
...
# Previous settings above if any
"mcpServers": {
"server_name": {
# MCP server configurations here
}
}
}
在本教程中,我们将配置与 GitHub 账号的连接,以便将之前的报告数据推送到 GitHub
配置 GitHub MCP 服务器
首先,我们先创建 Gemini CLI 项目配置文件。运行以下命令
mkdir -p .gemini && touch .gemini/settings.json
然后,打开 .gemini/settings.json 文件,并填写以下配置
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "your-personal-access-token"
},
"timeout": 5000
}
}
}
现在,我们需要您自己的 GitHub 个人访问令牌,因此请确保您已拥有自己的 GitHub 账号。
登录您的 GitHub 账号,然后前往设置

然后,向下滚动以找到开发者设置并点击它

然后选择个人访问令牌,并选择令牌(经典)


在此处为您的个人访问令牌命名,然后选中 repo 范围

然后向下滚动并点击生成令牌按钮,确保您
点击生成新令牌按钮,然后选择生成新令牌(经典版)。然后,复制生成的令牌并将其写入 .gemini/settings.json

因此,您的 .gemini/settings.json 应类似于以下示例
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "ghp-xxxx"
},
"timeout": 5000
}
}
}
现在,我们来验证连接。运行以下命令,进入 Gemini CLI
gemini
然后,运行 /mcp 命令,您应该会看到 GitHub MCP 已正确配置

/mcp
然后,我们通过提交以下命令来测试此 MCP 连接

Aggregate the findings from @code-review.md and @security-analysis.md into a single report and ensure no duplicates issues reported. Post this report as a comment on the relevant pull request for the current git branch on GitHub and display the pull request URL for manual review
请注意此处的 @code-review.md 和 @security-analysis.md 注释,这是我们引用要传递给 Gemini CLI 的文件的方式。此命令将读取两个文件的内容,并使用 GitHub MCP 连接将评论推送到与此分支相关的拉取请求。之后,您可以在拉取请求网址中查看以进行验证。

9. 💡CI/CD 工作流中的 Gemini CLI
如果您是 GitHub 用户,可以利用 run-gemini-cli GitHub Action 轻松将 Gemini CLI 嵌入到 CI/CD 流水线中。它既是处理关键日常编码任务的自主智能体,也是可快速将工作委托给它的按需协作工具
您可以利用它直接在 GitHub 代码库中以对话方式使用 Gemini 来执行拉取请求审核、问题分诊、代码分析和修改等操作
您可以在此拉取请求中查看此集成示例,其中我们在 runner 中使用了 Gemini CLI 安全扩展程序,并在创建拉取请求时提供审核




10. 💡探索其他 Gemini CLI 扩展程序

您还可以访问 https://geminicli.com/extensions,探索更多扩展程序。快去看看,了解更多有趣的工具!
11. 🧹 清理
为避免系统因本 Codelab 中使用的资源向您的 Google Cloud 账号收取费用,请按照以下步骤操作:
- 在 Google Cloud 控制台中,前往管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关停以删除项目。