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`
如果不是,请尝试刷新浏览器,并确保在系统提示时点击授权 (可能会因连接问题而中断)
第 3 步:熟悉 Cloud Shell 编辑器并设置应用工作目录
现在,我们可以设置代码编辑器来执行一些编码操作。我们将使用 Cloud Shell 编辑器来完成此操作
我们需要克隆将与之交互的演示代码库。在终端中运行此命令以克隆代码库并打开 Cloud Shell 编辑器
git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo && cloudshell ws code-analysis-demo
现在,您的 Cloud Shell 编辑器工作目录应如下所示

接下来,我们需要确保 Shell 是否已配置为您拥有的正确项目 ID。如果您在终端中看到 $符号之前的 ( ) 内有值(在下面的屏幕截图中,该值为“your-workshop-project”),则此值表示为您的有效 Shell 会话配置的项目。

如果显示的值 已经正确 ,您可以跳过 下一个命令 。但是,如果该值不正确或缺失,请运行以下命令
gcloud config set project <YOUR_PROJECT_ID>
现在,我们可以进入下一阶段
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,以详细了解它。在终端中运行以下命令以进入 Gemini CLI
gemini
如果您正在寻找一些可使用的基本命令,可以输入 /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,您会看到它将以 diff(差异比较)形式呈现,并显示您是否要接受或拒绝建议的选项。在这里,您可以看到 Gemini CLI 请求您授予写入文件的权限

5. 🚀 扩展程序
为了通过 AI 智能体改进特定任务的输出,我们需要解决的难题包括如何精心设计适当的提示、如何通过适当的工具集成来管理适当的上下文工程等。
Gemini CLI 扩展程序是预先打包且易于安装的提示和集成,可以连接到外部工具。每个扩展程序都包含一个内置的“playbook”,介绍如何有效地使用工具,并且可以由以下组件组成:
- 自定义斜杠命令
- 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. 🚀 互动模式 - 代码安全性分析扩展程序应用
Security 扩展程序是一个开源 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 标志以自动批准所有操作,这意味着在非互动模式下启用所有工具
如果您在 Cloud Shell 中运行此 yolo 标志,系统默认配置将禁止您运行该标志并显示此错误消息
Cannot start in YOLO mode when it is disabled by settings
运行以下命令以设置工作区级配置文件
mkdir .gemini && cloudshell edit .gemini/settings.json
现在,settings.json 文件将在编辑器中打开,复制以下配置以允许 yolo 模式
{
"security": {
"disableYoloMode": false
}
}
现在,让我们使用以下命令运行 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 并前往 Settings (设置)

之后,向下滚动以找到 Developer settings (开发者设置),然后点击它

然后选择 Personal access tokens (个人访问令牌),并选择 Tokens (classic) (令牌(经典版))


在此处为您的个人访问令牌命名,并选中 repo (代码库)范围

然后向下滚动并点击 Generate Token (生成令牌)按钮,确保您
点击 Generate new token button (生成新令牌按钮),然后选择 Generate new token (classic) (生成新令牌(经典版))。之后,复制生成的令牌并将其写入 .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 CLI Security 扩展程序,并在创建拉取请求时提供审核




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

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