1. 📖 簡介

在本程式碼研究室中,您將瞭解 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」。如果系統提示您授權,請按一下「Authorize」(授權)。


連線至 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 編輯器執行這項操作
按一下「Open Editor」(開啟編輯器) 按鈕,開啟 Cloud Shell 編輯器 
現在您會看到如下所示的 Cloud Shell 編輯器介面

現在,請複製我們要互動的示範存放區。首先,我們需要開啟編輯器的終端機。方法是在選單列中依序點選「Terminal」->「New Terminal」,或是使用 Ctrl + Shift + C 鍵盤快速鍵,瀏覽器底部就會開啟終端機視窗。

然後在終端機中執行下列指令
git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo
完成後,前往 Cloud Shell 編輯器頂端,依序點選「File」->「Open Folder」,找出您的使用者名稱目錄,然後找出複製的存放區目錄 code-analysis-demo,再點選「OK」按鈕。這會將所選目錄設為主要工作目錄。在本範例中,使用者名稱為 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 擴充功能是預先封裝且易於安裝的提示和整合功能,可連結至外部工具。各項擴充功能都內建「應對手冊」,能教導 AI 如何有效使用工具,並可由下列元件組成:
- 自訂斜線指令
- 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 指令,您會看到這 2 個擴充功能已安裝完畢

/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 殼層,就能執行所有程序。如要在非互動模式下執行 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,然後前往「Settings」

接著向下捲動,找出並點選「開發人員設定」

然後選取「Personal access tokens」,並選擇「Tokens (classic)」。


在此為個人存取權杖命名,並勾選「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 pipeline。不僅是處理重要例行程式設計工作的自主代理,也是隨時待命的小幫手,讓你可以快速交代工作
您可以在 GitHub 存放區中,直接透過 Gemini 對話功能執行提取要求審查、問題分類、程式碼分析和修改等作業
如要查看這項整合的範例,請參閱這項提取要求。我們在執行器內使用 Gemini CLI Security 擴充功能,並在建立提取要求時提供評論




10. 💡探索其他 Gemini CLI 擴充功能

你也可以前往 https://geminicli.com/extensions 探索更多擴充功能。歡迎查看更多有趣的工具!
11. 🧹 清除
如要避免系統向您的 Google Cloud 帳戶收取本程式碼研究室所用資源的費用,請按照下列步驟操作: