Gemini CLI 深度解析

1. 简介

be8ebdfe42ca39ac.png

大家好!我叫斯帕奇!很高兴您能来。我从 us-central1 的 GKE 集群一路飞奔而来,才得以今天来到这里。欢迎使用此 Codelab。

我一生都在 Google Cloud 的数据流中奔波,见证了各种各样的事情。我看到各位建筑师和工程师创造了许多令人惊叹的作品。但我还看到你被荆棘困住过。您知道我在说什么!在 GKE 中调试 pod 时,您会感受到上下文切换。您需要在 kubectl logs、GCP 控制台(用于检查节点的健康状况)、IDE(用于查看已部署的源代码)以及包含有关 pod 生命周期钩子的官方 Kubernetes 文档的浏览器标签页之间来回切换。每次跳跃都是一次注意力中断!

以及复杂的工具gcloudkubectlterraform... 每种都有自己的 DSL 和大量标志。这会导致不断查找文档。您最终会搜索到一条完美的 gcloud 命令,其中包含正确的 --filter--format 标志组合,以便获取所需的数据。这就像在数百万棵树组成的森林中寻找一颗特定的坚果。至于重复性任务,我简直不想多说。我看到您为新的 Python 服务编写了太多次相同的 Dockerfilecloudbuild.yaml,以至于代码可能都产生了似曾相识的感觉。

不过,我今天来这里是为了向您展示一种更好的方法。一条穿过树林的秘密小径。这正是 Gemini CLI 的精髓所在!

什么是 Gemini CLI?

那么,我如此兴奋的这个神奇快捷方式是什么呢?

可以将 Gemini CLI 视为终端中的个人云端助手。这是对话,是合作伙伴关系!它是情境感知型,这是一种比较花哨的说法,意思是它不仅会听,还会理解。它可以读取您的文件,了解您项目的惯例(例如您是使用制表符还是空格),并弄清楚您想做什么。这就像我能闻到您想收集的橡子一样!

高级别架构(让我们深入了解一下!)

那么,这一切是如何运作的呢?它融合了多项出色的功能,可协同工作:

  1. 强大的语言模型:这是大脑!具体来说,它是由 Google 训练的大型多模态模型。“多模态”意味着它不仅能理解文本,还能理解代码的结构含义。这样,它就能推理您的软件,而不仅仅是读取软件。
  2. 本地背景信息:这一点至关重要。Gemini CLI 在本地机器上以进程形式运行,并具有与用户账号相同的权限。这意味着它可以访问您的文件系统,以提供项目专属帮助。它不是猜测您的代码的遥远云服务,而是与您同在。
  3. 工具生态系统:这是模型与世界互动的方式。它具有一组明确定义的可以调用的函数,例如 read_filerun_shell_command。您可以将其视为安全的 API。模型会决定做什么和使用哪个工具,然后生成 tool_code 代码块来执行操作。这使得其操作可预测且可靠。
  4. Shell 命令执行:这才是真正的神奇之处!它可以在 bash -c <command> 子 shell 中运行任何命令。它会捕获 stdoutstderrexit code。这太棒了!这意味着 Gemini CLI 可以运行命令、检查命令是否失败,然后尝试根据错误消息进行修复。
  5. 安全网:这是我最喜欢的部分!在执行该 tool_code 代码块之前,CLI 客户端会向您显示exact的命令或代码,并征求您的确认。这是一项客户端检查,因此在任何内容触及您的系统之前,您拥有最终决定权。您始终是主导者!

它不仅是聊天机器人,还是实干家!编码冒险之旅中的得力助手。

核心概念:声明式与命令式

最重大、最棒的变化是,从告诉计算机如何做某事,转变为告诉计算机您想要什么

  • 命令式(旧方法,比较棘手):您必须提供每个步骤。您必须精通该工具的特定领域语言。例如,如下所示的复杂命令:
    gcloud compute instances create my-vm --project=my-project --zone=us-central1-a --machine-type=e2-medium --image-family=debian-11 --image-project=debian-cloud --metadata-from-file startup-script=./startup.sh --tags=http-server,dev
    
    
    糟糕!看看这些!您必须了解机器类型、映像系列、元数据和标记的语法。如果缺少任何一个部分,您都会收到一条神秘的错误消息。
  • 声明式(Sparky 快捷方式!):只需用简单明了的英语说出您想问的问题即可!

Create a new e2-medium VM for my web server in us-central1, run the startup.sh script, and tag it for http traffic.

大功告成!Gemini 会解析您的请求,将其映射到 gcloud 工具的参数,确定每个标志的正确语法,并为您构建这个庞大而复杂的命令。然后,系统会显示该草稿,供您审批。我们希望您成为宏观思考者,而不是命令行标志记忆者。

扩展 Gemini 的功能:CLI 扩展程序简介

虽然 Gemini CLI 本身就是一款强大的工具,但通过扩展程序可以充分发挥其潜力。扩展程序是提示、工具和自定义命令的组合,可增强 CLI 的功能,让您根据自己的具体需求和工作流程进行定制。

查找和安装扩展程序

Gemini CLI 拥有不断壮大的扩展程序生态系统,这些扩展程序由 Google 和第三方开发者共同打造。您可以访问 geminicli.com/extensions,浏览官方扩展程序目录。

如需安装扩展程序,您可以使用 gemini extensions install 命令,并提供扩展程序的 Git 代码库的网址。例如,如需安装官方 Cloud SQL for PostgreSQL 扩展程序,您需要运行以下命令:

gemini extensions install https://github.com/gemini-cli-extensions/cloud-sql-postgresql

好了,闲话少说!让我们开始动手,实际尝试一下吧!

2. 准备工作

86dffda616ab7a1d.png

未来的云向导,您好!Sparky 随时为您效劳。在我们开始精彩的冒险之前,需要确保您的工作室环境已准备就绪。这就像我们在前往森林之前,将所有合适的工具和神奇的橡子装入背包一样。跟我来!

如果您已有 Google Cloud 项目,则可以在 Google Cloud Shell 中使用 Gemini CLI,因为该环境已预安装 Gemini CLI。或者,您也可以按照以下步骤在本地机器上进行设置。

第 1 步:基本要求(前提条件)

每位优秀的冒险者都需要坚实的基础。在安装 Gemini CLI 之前,您需要在本地机器上预先设置几项内容。

  1. Google Cloud SDK (gcloud):这是 Google Cloud 的主要工具包。Gemini CLI 是该系列的一部分!
  • 检查是否已安装:运行 gcloud --version。如果您看到版本号,则表示一切就绪!
  • 如果未安装:请按照官方说明 (cloud.google.com/sdk/docs/install) 进行操作。
  1. Git:我们需要使用此工具来克隆实践实验室代码库。
  • 检查是否已安装:运行 git --version
  • 如果未安装:您可以从 git-scm.com/downloads 获取。
  1. GCP 项目和身份验证
  • 确保您拥有已启用结算功能的 Google Cloud 项目。这一点非常重要!
  • 运行以下命令以登录您的 Google 账号:
gcloud auth login
  • 为会话设置项目。从 GCP Console 中找到您的项目 ID,然后运行:
gcloud config set project YOUR_PROJECT_ID

(请将 YOUR_PROJECT_ID 替换为您的实际项目 ID!)

  1. Node.js 20 或更高版本

第 2 步:体验神奇功能!(安装 Gemini CLI)

好了,基本知识已经介绍完毕,现在该进入正题了!我们将安装 Gemini CLI。

使用 npx 立即运行

# Using npx (no installation required)
npx https://github.com/google-gemini/gemini-cli

使用 npm 全局安装

npm install -g @google/gemini-cli

使用 Homebrew(macOS/Linux)进行全局安装

brew install gemini-cli

查看 Gemini 版本

gemini --version

您应该会看到一个版本号。这表示安装成功。

第 3 步:开机(配置)

现在,Gemini CLI 已安装完毕,我们需要为其提供访问权限。首先,在终端中运行命令 gemini 以启动该工具。您会看到以下屏幕:

9378d804bc647191.png

为简单起见,您可以使用 Google 账号进行身份验证,这样一来,您就可以使用 Gemini 2.5 Pro,享受 100 万个令牌的上下文窗口,并以每分钟最多 60 个请求和每天最多 1,000 个请求的速度使用该模型,而无需管理 API 密钥。

如果您想使用特定的 Gemini 模型或在需要时升级到更高的限额,请使用 Gemini API 密钥作为身份验证方法。

对于已设置 Google 项目和结算账号的企业团队和生产工作负载,请使用 Vertex AI 来获得高级安全性和合规性。

系统会根据您选择的选项提示您完成后续步骤,以配置身份验证。如需详细了解这些选项,请参阅 Gemini CLI 文档

如果您打算使用 Google Cloud 的 Vertex AI 平台,请先按 ctrl+c 两次退出 Gemini CLI,然后设置所需的环境变量

无论您使用哪种身份验证方法,通常都需要设置以下变量:GOOGLE_CLOUD_PROJECT 和 GOOGLE_CLOUD_LOCATION。

如需设置这些变量,请执行以下操作:

# Replace with your project ID and desired location (e.g., us-central1)
export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"
export GOOGLE_CLOUD_LOCATION="YOUR_PROJECT_LOCATION"

现在,我们来登录 Google Cloud:

gcloud auth application-default login

使用上一种方法完成身份验证后,在终端中运行 gemini 命令,再次启动 Gemini CLI。在身份验证选项中,选择 Vertex AI,然后即可完成设置。

第 4 步:Spark 测试!(验证设置)

关键时刻到了!我们来看看一切是否正常运行。运行这些命令,确保所有指示灯都亮起绿色。

  1. 输入以下提示:
What is my current directory?

Gemini CLI 应通过告知您当前的工作目录来做出响应。此测试用于测试核心语言模型和 shell 集成。

15a12d7b3fdd2d83.png

  1. 测试 GCP 连接:
list my gcs buckets

如果您有任何 GCS 存储分区,系统应会列出这些存储分区。如果没有,系统会告知您没有。这可确认该服务已正确连接到您的 GCP 项目。

第 5 步:赋予其更多超能力!(安装扩展程序)

现在,我们来安装一些扩展程序,以增强 Gemini CLI 的功能,这些扩展程序在稍后的实验中会派上用场。

Cloud Run

gemini extensions install https://github.com/GoogleCloudPlatform/cloud-run-mcp

Gemini CLI 安全性

gemini extensions install https://github.com/gemini-cli-extensions/security

gcloud

gemini extensions install https://github.com/gemini-cli-extensions/gcloud

Cloud SQL for PostgreSQL

gemini extensions install https://github.com/gemini-cli-extensions/cloud-sql-postgresql

如果所有这些命令都正常运行,那么您就可以正式参加研讨会了!您的环境已设置完毕,可以开始提高工作效率了。我们第一个实验中再见!

3. 核心概念和本地工作区互动

a7bf3a905d8e2638.png

好了,准备好亲身实践了吗?现在,我们来看看新 Gemini 工具包中的实际工具。我认为它们是我在云端探索和构建的超能力!下面我们来深入了解一下这些功能的工作原理。

核心功能

我将自己的超能力分为两类:了解外部世界,然后实际行动!

了解您所处的环境(我的超感官!)

在开始建造新巢之前,您得先看看树,对吧?这些工具用于了解地形。

  • list_directory:这是我的基本“嗅探”工具。它是对标准操作系统级目录列表的简单封装。但最酷的是,该模型可以解析这种结构化输出,从而做出决策,例如选择探索名为 src 的子目录。
  • glob:这个是我的“橡子查找器”!它使用标准的 glob 模式(例如 ***?[]),这些模式与您在 .gitignore 等方面已了解的模式类似。因此,您可以使用模式 app/**/*.py 提出“查找 app 目录中的所有 *.py 文件”这样的问题。这是一种强大的方式,可用于收集一组特定的文件供模型分析。
  • search_file_content:这是我的透视眼!它使用完整的正则表达式 (regex) 进行搜索,而不仅仅是简单的字符串匹配。这非常强大。您可以让它查找复杂的模式,例如“查找所有使用 POST 方法的 Flask 路由”,这可能会生成类似 app\.route\(.*methods=\['POST'\].*\) 的正则表达式。它会返回文件路径、行号和匹配的行,从而为模型提供所需的所有上下文。
  • read_file:找到感兴趣的文件后,您可能想打开它。read_file 已针对此情况进行优化。您可以读取整个文件,也可以使用 offsetlimit 参数分块读取大文件。这意味着,即使是巨大的日志文件,模型也能高效扫描,而不会超时。

从了解情况到采取行动(开始构建!)

好了,您已经探索过地形了。现在,该开始筑巢了!借助这些工具,您可以进行更改并完成任务。

  • **write_file**:需要从头开始创建新文件?write_file 是一种原子操作,用于将您提供的完整内容写入指定路径。它非常适合根据项目需求从头开始搭建新模块或创建 Dockerfile
  • **replace**:此工具用于进行精细的更改!这不仅仅是简单的查找和替换。您提供 old_stringnew_string。为了确保安全地实现此目的,old_string 需要是文件中的唯一代码段,通常在您要更改的部分前后都有几行上下文。这样可确保我们仅更改您打算更改的exact代码段。
  • **run_shell_command**:这是终极能量块!它会在 bash -c <command> 子 shell 中执行给定的命令。模型会返回 stdoutstderrexit code。这对于构建工作流至关重要。模型可以运行 terraform plan,读取输出,如果计划成功(退出代码为 0),则可以询问您是否应应用该计划。

安全网(我对您的承诺!)

现在,运行命令可能会让人感到害怕。我明白了!因此,安全网非常重要。当模型生成包含对 run_shell_commandwrite_file 的调用的 tool_code 代码块时,Gemini CLI 客户端会拦截该代码块。它会显示要写入的确切命令或文件的完整内容,并显示 [y/n] 提示。未经您的明确批准,系统不会执行任何操作。您始终处于主导地位。

4. 探索项目

314faf951de66388.png

目标:使用 Gemini CLI 在不离开终端的情况下了解不熟悉的代码库。

场景:您是一名新开发者,需要快速了解此项目!

任务 0:设置 - 克隆项目!

首先,我们需要获取代码!它隐藏在 GitHub 上的一个公共代码库中,位于名为 quickpoll 的“树”中。让 Gemini CLI 为我们克隆它。在此之前,我们先创建一个工作目录,然后从该工作目录中启动 Gemini CLI:

mkdir workdir
cd workdir
gemini

现在,输入以下提示:

clone the github repository from the URL: https://github.com/gauravkakad-google/quickpoll.git

46c2feb0d1184db7.png

Gemini 会理解“克隆”是指使用 git clone 命令。它将生成一个 run_shell_command 工具调用,其中包含类似 git clone https://github.com/gauravkakad-google/quickpoll.git 的内容。您批准后,系统会为您下载代码库。

现在,按两次 ctrl+c 退出 Gemini CLI,前往示例代码库,然后再次启动 Gemini CLI:

cd quickpoll
gemini

太棒了!现在,我们已进入项目树,可以开始探索了!

任务 1:列出项目中的所有文件

现在我们已经进入森林,接下来要绘制整个森林的地图。我们希望看到每个文件。向 Gemini 询问以下问题:

List all the files in the project.

Gemini 可能会使用 glob 工具,并采用 **/* 模式。此命令会以递归方式列出每个文件,从而为您提供代码库的完整清单。这是了解项目结构的第一步,也是非常重要的一步。

任务 2:查找所有导入了“google.cloud.sql.connector”的文件

好的,我很好奇。此项目在何处与 Google Cloud Storage 通信?让我们来做一些侦探工作。询问以下问题:

Find all files that import the 'google.cloud.sql.connector' library.

568fdb8ff4889c5d.png

Gemini 将利用其 search_file_content 强大功能,找到包含相应 import 语句的确切文件。这样一来,您就可以立即将注意力集中在处理 Cloud SQL 交互的代码部分。在此项目中,它应找到 backend/main.py

任务 3:显示主 Dockerfile 的内容

我看到了Dockerfile!这就是我们容器的蓝图。让我们一探究竟。只需询问:

Show me the contents of the main Dockerfile.

e49a83b3efbcf807.png

Gemini 将使用 read_file 来显示 Dockerfile。您可以分析基础映像 (FROM)、正在安装的依赖项 (RUN pip install...) 和最终命令 (CMD)。这可让您了解应用的运行时环境。

任务 4:main.py 文件的用途是什么?

好了,现在我们来看一下代码的核心部分。让 Gemini 成为我们的向导。说出以下内容:

What's the purpose of the `main.py` file?

81d480c285285150.png

这正是 Gemini CLI 的优势所在。它将首先在 backend/main.py 上调用 read_file。然后,其多模态语言模型将分析 Python 代码。它将识别出这是一个为轮询应用提供 REST API 的 FastAPI 应用。然后,本文将介绍 API 端点及其功能。这样一来,您就无需自行阅读和解读所有内容,节省了时间。您还可以提出后续问题,详细了解其中一些功能。是不是很棒?快来试试吧!

5. 从本地到直播!使用 Cloud Run 和 Cloud SQL 进行部署

db708c2edf0036a9.png

好了,云端冒险家,您已经侦查了这片区域。现在,该在云端建造自己的树屋了!我们将使用快速投票应用,并将其变成任何人都可以访问的实时 Web 应用。

目标:将 quickpoll 应用部署到 Cloud Run,并使用 Cloud SQL for PostgreSQL 作为后端。

任务 1:为数据打造坚固的分支(设置 Cloud SQL)

每个优秀的应用都需要一个地方来存储其珍贵的橡子... 我是说,数据!我们将使用 Cloud SQL for PostgreSQL。它就像一个神奇的自动照料花园,让我们可以专注于有趣的事情。

我们来让 Gemini CLI 为数据库植入初始数据。

Please create a new Cloud SQL for PostgreSQL instance for me in project <myproject>. Call it quickpoll-db and put it in us-central1. Lets use the Development preset for now, and make the root password a-very-secure-password!.

6c09e8e548efe217.png

Gemini CLI 将使用其 Cloud SQL 扩展程序开始工作。系统会显示 create_instance 工具调用。请继续并批准!

实例创建完成后,您应该会看到类似如下所示的输出:

1378c05137bf9260.png

您可以创建一个包含上述环境变量的 .env 文件,并在重启 Gemini CLI 之前获取该文件,以便 Gemini CLI 可以访问这些变量。

在实例增长期间,我们来准备土壤。我们需要为应用创建一个数据库和一个用户。

In the quickpoll-db instance, create a new database named quickpolldb.

Gemini CLI 将使用 Cloud SQL for PostgreSQL 扩展程序中的 create_database 工具为您创建数据库。

3a0ffbf97fbc35cc.png

现在,我们来添加一位用户来照看它:

In the quickpoll-db instance, create a built in user named quickpoll-user with the password another-secure-password!.

这次,Gemini CLI 将使用 create_user 工具。

562db72ed9a59d4a.png

任务 2:Secret 路径(连接后端)

我们的后端需要知道新数据库的密钥路径。让我们看看 backend/main.py,了解它是如何找到自己的位置的。

show me how would the backend/main.py connect to the database

6592c52d634253ce.png

原来如此!看到了吗?它使用 Cloud SQL Python 连接器,并查找 CLOUD_SQL_POSTGRES_INSTANCE、CLOUD_SQL_POSTGRES_USER、CLOUD_SQL_POSTGRES_PASSWORD 和 CLOUD_SQL_POSTGRES_DATABASE 等环境变量。我们需要将这些信息提供给 Cloud Run 服务。

首先,我们需要 CLOUD_SQL_POSTGRES_INSTANCE。这就像秘密握手一样。

What are the details for the Cloud SQL instance quickpoll-db in us-central1?

aa539ea8798aad71.png

您会看到许多详细信息。找到“连接名称”,然后复制该值。其格式应为 your-project-id:us-central1:quickpoll-db

现在,在将应用部署到 Cloud Run 之前,我们先使用所需的表实例化数据库。由于我们已创建单独的数据库和用户,因此请退出 Gemini CLI,并使用新值更新之前创建的 .env:

export CLOUD_SQL_POSTGRES_USER=quickpoll-user
export CLOUD_SQL_POSTGRES_PASSWORD=password-you-provided
export CLOUD_SQL_POSTGRES_DATABASE=quickpolldb

现在,重启 Gemini CLI 并输入以下内容:

execute backend/database.sql file on quickpolldb database as quickpolluser in quickpoll-db instance

5201cbf678dd3fc9.png

它自动发现工具 execute_sql 不支持在一次调用中执行多个 SQL 命令。因此,它会继续单独执行每个 SQL 命令。

任务 3:后端,起飞!(部署到 Cloud Run)

是时候让后端离开巢穴了!我们将告知 Gemini 将后端文件夹部署到 Cloud Run,并向其提供数据库的 Secret 路径。

Deploy the backend folder to a new Cloud Run service called quickpoll-be in us-central1. Here are the secrets (environment variables):
CLOUD_SQL_POSTGRES_INSTANCE=your-project-id:us-central1:quickpoll-db
CLOUD_SQL_POSTGRES_USER=quickpoll-user
CLOUD_SQL_POSTGRES_PASSWORD=password-you-provided
CLOUD_SQL_POSTGRES_DATABASE=quickpolldb

Gemini 会打包您的代码,创建容器映像,并将其部署到 Cloud Run。完成后(可能需要几分钟时间),您将获得一个指向全新后端服务的网址。请妥善保存该网址!

f3330321e52c98e9.png

任务 4:最后润色(配置和部署前端)

我们的前端就像应用的友好面孔。它需要知道在哪里找到后端。我们来告诉它该去哪里。

Deploy the frontend folder to a new Cloud Run service called quickpoll-fe in us-central1. Here are the secrets (environment variables):
BACKEND_URL=backend-url

a80fe48e54b47c4.jpeg

任务 5:盛大揭幕!

大功告成!关键时刻到了!获取 quickpoll-fe 服务的网址,并在网络浏览器中打开该网址。

您应该会看到您的 QuickPoll 应用,它已上线并可供使用!快来创建投票、投出选票,并实时查看结果更新。

大功告成!您将本地计算机上的项目迁移到了 Google Cloud 上。而这一切都是在终端中通过您值得信赖的助手 Gemini CLI 完成的。

这才是真正的工作效率!

6. 对于开发者 - 加快开发生命周期

8feb670e686f4038.png

开发者们,真正的乐趣从这里才开始!我们已经探索了一个项目,现在该构建了。接下来,我将向您展示 Gemini 如何成为您的终极编码伙伴,帮助您以比松鼠找到坚果更快的速度将简单的想法转化为可用于生产环境的代码!

从想法到代码

不妨考虑一下典型的开发周期。这不仅仅是编写代码,对吧?它会进行脚手架搭建、添加错误处理、重构和编写测试。Gemini 可以帮您完成所有这些任务!

样板文件和重复性任务:告别复制粘贴!

好了,您现在已拥有基本应用功能。现在,您需要添加日志记录并处理潜在的错误,对吗?这通常会涉及许多重复的 try...except 代码块。现在无需再为此烦恼!我们先让 Gemini CLI 分析代码,并针对错误日志记录和异常处理提供最佳实践建议:

What are the best practices for error handling and logging that should also be included in this application?

3a132d7bbf57bf67.png

Gemini CLI 将分析现有文件并提供一些最佳实践建议。不妨将它视为专家助理,可为您节省自行研究这些内容的时间。

现在,我们让它为您实现这些建议:

please go ahead and implement these in the existing app

实际输出可能因情况而异,但最终您应该会看到它所做更改的详细信息。例如,在下面的屏幕截图中,您可以看到它添加了 structlog 以生成 JSON 格式的日志,实现了集中式异常处理,并改进了请求响应的记录方式。想想您刚刚省去了多少输入操作!

7fcd0153f88740ce.png

重构:您的个人代码审核员

我们都希望编写简洁高效的代码。但有时,我们可能很着急。Gemini 可以充当您的个人代码审核员。您可以向它提出以下问题:

please perform a comprehensive code review for best practices and security

e5482012a524210e.png

32039b0638d1efd.png

Gemini 了解特定于语言的最佳实践。同样,您获得的实际输出可能与上述屏幕截图不同,但如果您仔细阅读输出,就会发现 Gemini CLI 在分析代码时考虑到了很多细节。它可帮助您在学习的同时改进代码!

测试生成:最精彩的部分!

这是我最喜欢的技巧!我们都知道应该编写测试,但这项工作可能很枯燥乏味,尤其是在您必须模拟某些内容时。我们来看看。您只需提出以下问题:

Add a test suite to this application

d7475f5ca8c9d99d.png

ac55b84b842187b.png

3653819afe847cf3.png

Gemini 会分析您的函数,确定其输入和输出,并找出其依赖项。然后,它会生成一个包含多个测试用例的完整 test_main.py 文件,包括“理想路径”和可能的错误情况。这能极大地提高工作效率!

运行测试!(为您准备的挑战任务)

现在,真正精彩的部分来了!这部分内容留给您自行探索。您可以随时提示 Gemini CLI 执行其生成的测试用例。然后,您只需坐下来,静静地观看奇迹的发生!

7. 超越本地主机:与 GitHub 集成

d2664a4c173f1d6.png

我们在本地机器上完成了一些出色的工作,这里是我们自己的小森林。但云端的真正强大之处在于协作和连接!现在,让我们一起起飞,看看 Gemini 如何与更广阔的世界互动,首先从开发者森林中最大的树木开始:GitHub!

概念:集成式 DevOps 助理

到目前为止,我们一直将 Gemini 用作本地编码助手。现在,我们将它升级为功能全面的集成式 DevOps 助理。这完全得益于 Model Context Protocol (MCP) 集成。这个名称听起来很高端,但它只是表示 Gemini 可以代表您安全地与其他服务进行对话,而我们要掌握的第一个服务是 GitHub。

仔细想想。您需要多久离开一次终端,才能在 GitHub 上查看拉取请求、创建问题或浏览代码库?这会增加上下文切换的次数!借助 github 工具集,您可以在此处完成所有这些操作。它将 Gemini 变成 GitHub 的原生界面。

官方 GitHub MCP 服务器文档提供了有关其公开的工具和配置选项的充足指导。您可以自由选择本地或远程操作,因为 Gemini CLI 完全支持远程 MCP 服务器。

本教程将指导您设置 GitHub 的远程 MCP 服务器选项。首先,您需要从 GitHub 获取个人访问令牌 (PAT)

获取 PAT 后,就可以将 MCP 服务器对象添加到 settings.json 文件中了。我的完整 settings.json 如下所示,但您只需确保您的 mcpServers 对象与此处显示的内容一致即可:

{
  "security": {
    "auth": {
      "selectedType": "vertex-ai"
    }
  },
 "mcpServers": {
    "github": {
      "httpUrl": "https://api.githubcopilot.com/mcp/",
      "headers": {
        "Authorization": "GITHUB_PAT"
      },
      "timeout": 5000
    }
  }
}

使用 GitHub MCP 服务器配置更新 settings.json 后,只需重启 Gemini CLI 或执行 /mcp refresh 命令即可。以下屏幕截图展示了我的系统上已准备就绪的 GitHub MCP 服务器,其中展示了 Gemini CLI 现在可以通过 Model Context Protocol 使用的各种强大工具。

cf9cab5f70ca1fc2.png

主要命令展示

Gemini 推出了一整套专为 GitHub 设计的全新超能力。以下是我最喜欢的几本:

  • github.list_repositories:想在不打开浏览器的情况下查看组织中的所有代码库?这是您的工具!只需问“列出我组织中的所有代码库”。
  • github.create_issue:发现了 bug?无需切换窗口即可创建问题。你只需告诉 Gemini,“在 sample-flask-app 代码库中创建一个标题为‘修复登录 bug’的问题,并附上以下说明…”,然后,问题就创建好了。
  • github.get_pull_request:需要查看 PR 吗?您可以询问“Show me the details of PR number 42 in the sample-flask-app repo.”Gemini 将提取标题、说明、状态以及审核者。
  • github.get_file_contents:这个功能非常棒。您可以从远程代码库读取文件,而无需先克隆该代码库!它非常适合快速检查您没有本地访问权限的项目的配置文件或 README。

8. GitHub 探索

7e66f28519488019.png

闲话少说,我们开始飞行吧!我们将使用新的 GitHub 功能来探索组织和项目,所有操作都可以在终端中轻松完成。

目标:使用 Gemini 探索和了解 GitHub 上托管的项目。

场景:您需要熟悉之前从未参与过的 GitHub 项目。

任务 1:列出组织中的代码库

首先,我们来查看 GitHub 组织中的所有项目。在本实验中,您可以使用自己的 GitHub 用户名或您所属的组织。让 Gemini 列出这些功能。

List the repositories in the `[your-org-or-username]` GitHub organization.

(请记得将 [your-org-or-username] 替换为您的实际信息!)Gemini 将使用 github.list_repositories 工具,并向您显示所有项目的列表。也很棒!

任务 2:查找特定代码库

您会看到代码库列表。现在,就像真正的开发者一样,您需要扫描该列表并找到您感兴趣的项目。在本实验中,我们假设要查找之前克隆的 quickpoll 代码库。您无需为此部分使用命令,只需读取上一步的输出并找到相应代码库即可!

任务 3:列出未完成的拉取请求

现在,我们已经确定了目标代码库,接下来看看该代码库的情况。是否有任何未完成的拉取请求?我们来问一下:

List the open pull requests for the `quickpoll` repository in the `[your-org-or-username]` organization.

Gemini 将使用 github.list_pull_requests 工具,并过滤 open 状态。然后,它会列出所有未完成的 PR,并显示 PR 编号、标题和创建者。您可以即时了解项目的积极开发情况。您可以尝试使用您正在积极贡献代码的仓库,并查看结果。

38aecd94347e633c.png

任务 4:调查拉取请求

假设该列表中有一个有趣的 PR。我们想详细了解一下!我们希望看到说明以及更改了哪些文件。从列表中选择一个 PR 编号(如果没有,您可以跳过此步骤,但我们假设有一个)。

Show me the details and files changed in PR number 1 in the `quickpoll` repo.

这是一个很好的 Gemini 多步任务示例!首先,它可能会使用 github.get_pull_request 来提取主要详细信息(标题、正文、作者等)。然后,为了获取文件更改,它会使用第二个工具 github.get_pull_request_files。然后,它会将所有这些信息汇总成一份简洁明了的摘要。您刚刚在不离开终端的情况下审核了一个 PR!是不是很棒?!

9. 从 PRD 到初始提交

bbaad74efa344d07.png

您已经学会了探索、构建和测试。现在,我们将通过一个实际场景来整合所有这些知识点。这一刻,我们将计划转化为产品。我们将从产品要求文档 (PRD) 一直讲到我们的第一个提交。让我们一起创造精彩应用!

目标:模拟从头到尾的真实开发任务,结合本地和远程上下文。

场景:您已获派一项新功能!您可以在项目的 GitHub 代码库中找到 PRD 文件,其中包含相关要求。

任务 1:了解 - 阅读 PRD

这是最关键的一步!在考虑编写任何一行代码之前,您必须完全了解该方案。我们新功能的要求位于 prd/NEW_FEATURE.md 文件中。让我们打开看看里面有什么。

explain the requirements mentioned in prd/NEW_FEATURE.md

Gemini CLI 将使用 read_file 来展示 PRD 的内容。快来体验吧!其中将概述一项新功能:供用户手动更新有效投票列表的“刷新”按钮。请务必先查阅蓝图!

b07e95a5977e927d.png

任务 2:代码 - 将要求转化为现实

这是神奇的时刻!我们将从 PRD 中提取需求,并让 Gemini 为我们编写代码。我们来具体说明一下,准确地告诉它我们想要什么。

Implement the changes as per the PRD

Gemini CLI 会立即开始运行,稍后您会看到类似于以下内容的输出。我们闪亮的新代码现在有了舒适的家!

aff664dee6796f8b.png

任务 3:验证您的更改

我们创建了一个包含新代码的新文件。本实验的最后一步是将更改部署到 Cloud Run 并进行验证。

let's deploy the changes made to frontend to Cloud Run. The existing service on Cloud Run is quickpoll-fe in us-central1.

请注意,该提示提供了其他详细信息,例如现有的 Cloud Run 服务名称及其部署区域。具体明确有助于节省时间,不过如果您遗漏了任何细节,Gemini CLI 始终会提示您。

如果更新后的 Cloud Run 服务遇到错误,只需提示 Gemini CLI 调试并修正代码即可。请记住,它是您的超级助手!

10. 恭喜

393fa778d8ee9f18.png

本次活动圆满结束!您刚刚完成了一个完整的开发周期。您从需求文档开始,最终开发出可提交并推送的新功能。您将本地上下文、远程上下文、文件系统操作和代码生成功能结合在一起。您不仅是开发者,还是高效的云架构师!恭喜!

参考文档