1. 📖 Giới thiệu

Trong lớp học lập trình này, bạn sẽ tìm hiểu những kiến thức cơ bản về Gemini CLI và sử dụng tiện ích đánh giá mã cũng như phân tích bảo mật của Gemini CLI trong quy trình phát triển phần mềm của mình.
Kiến thức bạn sẽ học được
- Cách thiết lập Gemini CLI
- Cách định cấu hình Gemini CLI
- Cách cài đặt tiện ích Gemini CLI
- Cách sử dụng tiện ích Gemini CLI để đánh giá mã và phân tích bảo mật
- Cách định cấu hình MCP cho Gemini CLI
- Cách kiểm tra Gemini CLI trong CI/CD
Bạn cần có
- Trình duyệt web Chrome
- Tài khoản Gmail
- Một Dự án trên đám mây đã bật tài khoản thanh toán
2. 🚀 Chuẩn bị thiết lập môi trường phát triển cho hội thảo
Bước 1: Chọn Dự án đang hoạt động trong Cloud Console
Trong Google Cloud Console, trên trang chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud (xem phần trên cùng bên trái của bảng điều khiển)

Nhấp vào biểu tượng đó, bạn sẽ thấy danh sách tất cả dự án của mình như ví dụ này:

Giá trị được biểu thị bằng hộp màu đỏ là MÃ DỰ ÁN và giá trị này sẽ được dùng trong suốt hướng dẫn.
Đảm bảo rằng bạn đã bật tính năng thanh toán cho dự án trên Cloud. Để kiểm tra, hãy nhấp vào biểu tượng trình đơn ☰ ở thanh trên cùng bên trái để xem Trình đơn điều hướng và tìm trình đơn Thanh toán


Nếu bạn thấy "Tài khoản thanh toán dùng thử của Google Cloud Platform" trong phần Thanh toán / Tổng quan ( phần trên cùng bên trái của bảng điều khiển đám mây), thì dự án của bạn đã sẵn sàng để sử dụng cho hướng dẫn này. Nếu không, hãy quay lại đầu hướng dẫn này và sử dụng tài khoản thanh toán dùng thử

Bước 2: Làm quen với Cloud Shell
Bạn sẽ sử dụng Cloud Shell cho hầu hết các phần của hướng dẫn, hãy nhấp vào Kích hoạt Cloud Shell ở đầu Google Cloud Console. Nếu hệ thống nhắc bạn uỷ quyền, hãy nhấp vào Uỷ quyền


Sau khi kết nối với Cloud Shell, chúng ta cần kiểm tra xem shell ( hoặc cửa sổ dòng lệnh) đã được xác thực bằng tài khoản của chúng ta hay chưa
gcloud auth list
Nếu bạn thấy gmail cá nhân của mình như ví dụ về đầu ra bên dưới, thì mọi thứ đều ổn
Credentialed Accounts
ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com
To set the active account, run:
$ gcloud config set account `ACCOUNT`
Nếu không, hãy thử làm mới trình duyệt và đảm bảo bạn nhấp vào Uỷ quyền khi được nhắc ( quá trình này có thể bị gián đoạn do sự cố kết nối)
Tiếp theo, chúng ta cũng cần kiểm tra xem shell đã được định cấu hình thành PROJECT ID chính xác mà bạn có hay chưa. Nếu thấy có giá trị bên trong ( ) trước biểu tượng $ trong thiết bị đầu cuối ( trong ảnh chụp màn hình bên dưới, giá trị là "your-workshop-project"), thì giá trị này cho biết dự án đã được định cấu hình cho phiên shell đang hoạt động của bạn.

Nếu giá trị xuất hiện đã chính xác, bạn có thể bỏ qua lệnh tiếp theo. Tuy nhiên, nếu không chính xác hoặc bị thiếu, hãy chạy lệnh sau
gcloud config set project <YOUR_PROJECT_ID>
Bước 3: Làm quen với Cloud Shell Editor và thiết lập thư mục làm việc của ứng dụng
Bây giờ, chúng ta có thể thiết lập trình chỉnh sửa mã để thực hiện một số việc liên quan đến mã hoá. Chúng ta sẽ sử dụng Trình chỉnh sửa Cloud Shell cho việc này
Nhấp vào nút Open Editor (Mở trình chỉnh sửa). Thao tác này sẽ mở Cloud Shell Editor 
Giờ đây, bạn sẽ thấy giao diện Cloud Shell Editor như minh hoạ bên dưới

Bây giờ, hãy sao chép kho lưu trữ bản minh hoạ mà chúng ta sẽ tương tác. Trước tiên, chúng ta cần mở cửa sổ dòng lệnh cho trình chỉnh sửa. Bạn có thể thực hiện việc này bằng cách nhấp vào Terminal -> New Terminal (Cửa sổ dòng lệnh -> Cửa sổ dòng lệnh mới) trên thanh trình đơn hoặc sử dụng tổ hợp phím Ctrl + Shift + C. Thao tác này sẽ mở một cửa sổ dòng lệnh ở phần dưới cùng của trình duyệt

Sau đó, hãy chạy lệnh này trên thiết bị đầu cuối
git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo
Sau đó, hãy chuyển đến phần trên cùng của Cloud Shell Editor rồi nhấp vào File->Open Folder (Tệp->Mở thư mục), tìm thư mục username (tên người dùng) của bạn rồi tìm thư mục kho lưu trữ được sao chép code-analysis-demo, sau đó nhấp vào nút OK. Thao tác này sẽ đặt thư mục đã chọn làm thư mục làm việc chính. Trong ví dụ này, tên người dùng là alvinprayuda, do đó, đường dẫn thư mục được hiển thị bên dưới


Giờ đây, thư mục làm việc của Cloud Shell Editor sẽ có dạng như sau

Bây giờ, chúng ta có thể chuyển sang giai đoạn tiếp theo
3. 🚀 Thiết lập và cấu hình
Nếu muốn cài đặt Gemini CLI trong hệ thống cục bộ, bạn có thể làm theo các bước sau:
- Đảm bảo hệ thống của bạn có Node phiên bản 20 trở lên
- Bật Gemini CLI bằng một trong hai cách sau:
- Cài đặt dưới dạng gói toàn cục
# Install as an executor
npm install -g @google/gemini-cli
# then run it from terminal
gemini
- Hoặc chạy trực tiếp từ nguồn để luôn có phiên bản mới nhất
npx https://github.com/google-gemini/gemini-cli
Khi bạn chạy lần đầu tiên, chương trình sẽ hỏi bạn một số câu hỏi. Nếu bạn chạy ứng dụng này từ một IDE (ví dụ: VSCode), ứng dụng sẽ hỏi bạn câu hỏi sau

Sau đó, hệ thống sẽ yêu cầu bạn chọn một trong số các phương thức xác thực

Có nhiều tùy chọn:
- Nếu bạn chọn Đăng nhập bằng Google, thì một trang Xác thực của Google sẽ mở ra trong trình duyệt và bạn chỉ cần chấp nhận trang này
- Nếu muốn sử dụng Khoá Gemini API, bạn sẽ cần tạo một khoá trên trang AI Studio, sau đó tạo tệp .env trong thư mục làm việc của bạn với biến GEMINI_API_KEY được đặt ( hoặc chạy lệnh
export GEMINI_API_KEY="your-api-key"trên dòng lệnh) - Nếu chọn sử dụng Vertex AI, bạn sẽ cần một dự án như đã thiết lập trước đó, đồng thời tạo tệp .env và đặt GOOGLE_CLOUD_PROJECT và GOOGLE_CLOUD_LOCATION
Nếu muốn thay đổi các phương thức xác thực này, bạn có thể chạy lệnh /auth từ Gemini CLI hoặc chỉnh sửa tệp cấu hình. Nếu bạn muốn chỉnh sửa trực tiếp tệp cấu hình, thì trên Linux, tệp này phải nằm trong $HOME/.gemini/settings.json . Bạn sẽ thấy loại security và auth, đồng thời có thể chỉnh sửa loại này
{
"security": {
"auth": {
"selectedType": "vertex-ai" # or "gemini-api-key" or "oauth-personal"
}
}
}

4. 🚀 Lệnh cơ bản và công cụ tích hợp
Bây giờ, hãy khám phá Gemini CLI để tìm hiểu thêm về công cụ này. Nếu đang tìm kiếm một số lệnh cơ bản có thể sử dụng, bạn có thể nhập /help để xem tất cả các lệnh hiện có

/help
Bạn sẽ thấy kết quả như sau 
Gemini CLI là một AI Agent, do đó, công cụ này sẽ được trang bị các công cụ để giải quyết nhiệm vụ do người dùng giao. Để xem các công cụ tích hợp mà nó có, hãy chạy lệnh /tools

/tools
Bạn sẽ thấy kết quả như sau

Bạn có thể thấy rằng Gemini CLI có một số chức năng như đọc và ghi vào tệp, tìm kiếm trên web và nhiều chức năng khác. Theo mặc định, một số công cụ này yêu cầu người dùng xác nhận do có nguy cơ tiềm ẩn
Bây giờ, hãy xem ví dụ thực tế bằng cách chạy các câu lệnh này trong Gemini CLI

Find top 10 OWASP security issue and write it down to owasp.md
Bạn sẽ thấy công cụ này sẽ gọi GoogleSearch và sau đó sẽ ghi kết quả bằng WriteFile. Nếu sử dụng IDE, bạn sẽ thấy rằng IDE sẽ trình bày dưới dạng một lựa chọn khác biệt và hiển thị cho dù bạn muốn chấp nhận hay từ chối các đề xuất. Tại đây, bạn có thể thấy Gemini CLI yêu cầu bạn cấp quyền ghi tệp

5. 🚀 Tiện ích
Để cải thiện kết quả của một tác vụ cụ thể bằng Trợ lý AI, những điều khó khăn là cách chúng ta có thể tạo ra một câu lệnh phù hợp, quản lý kỹ thuật bối cảnh phù hợp bằng cách tích hợp các công cụ phù hợp, v.v.
Tiện ích Gemini CLI là các câu lệnh và chế độ tích hợp được đóng gói sẵn và dễ dàng cài đặt, có thể kết nối với các công cụ bên ngoài. Mỗi tiện ích đều có một "sổ tay" tích hợp về cách sử dụng các công cụ một cách hiệu quả và có thể bao gồm những thành phần sau:
- Lệnh dấu gạch chéo tuỳ chỉnh
- Cấu hình MCP
- Tệp ngữ cảnh

Cài đặt tiện ích bảo mật
Ví dụ: trong hướng dẫn này, chúng ta sẽ tìm hiểu cách cài đặt các tiện ích code-review và security
Chạy lệnh sau để cài đặt các tiện ích security từ thiết bị đầu cuối
gemini extensions install https://github.com/gemini-cli-extensions/security
Hệ thống sẽ hiển thị các câu hỏi sau, bạn chỉ cần nhấn enter để chấp nhận
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.
Cài đặt tiện ích đánh giá mã
Tiếp theo, hãy cài đặt tiện ích code-review, chạy lệnh bên dưới
gemini extensions install https://github.com/gemini-cli-extensions/code-review
Sau khi hoàn tất, hãy chạy lại Gemini CLI
gemini
và chạy lệnh /extensions, bạn sẽ thấy 2 tiện ích này đã được cài đặt

/extensions
Được rồi, bây giờ hãy thực hiện một thao tác thực tế trên kho lưu trữ mẫu mà bạn đã sao chép trước đó
6. 🚀 Chế độ tương tác – Ứng dụng tiện ích phân tích bảo mật mã
Tiện ích Bảo mật là một tiện ích Gemini CLI mã nguồn mở, được xây dựng để tăng cường tính bảo mật của kho lưu trữ. Tiện ích này bổ sung một lệnh mới vào Gemini CLI để phân tích các thay đổi về mã nhằm xác định nhiều rủi ro và lỗ hổng bảo mật.
Bây giờ, trước tiên hãy chuẩn bị kho lưu trữ minh hoạ của chúng ta, chạy lệnh sau để chuyển sang nhánh nơi các thay đổi có rủi ro bảo mật đã được áp dụng
git checkout refactor/analysis-demo
Sau đó, hãy chạy Gemini CLI trong thiết bị đầu cuối
gemini
Sau đó, hãy chạy các tiện ích

/security:analyze
Thao tác này sẽ bắt đầu một quy trình chạy dài và trong quá trình này, bạn sẽ nhận được một số yêu cầu gián đoạn để xin phép bạn chạy một thao tác cụ thể, chẳng hạn như mkdir như minh hoạ dưới đây

Đây là một cơ chế bảo vệ để đảm bảo người dùng biết những gì sẽ được thực thi bởi Gemini CLI. Trong phần còn lại của hướng dẫn, bạn luôn có thể cho phép ( lựa chọn 2).
Tiện ích này sẽ gọi một quy trình chạy trong thời gian dài, bạn có thể thấy tiện ích này tạo một tệp lập kế hoạch bên trong thư mục .gemini_security và bạn có thể thấy danh sách kiểm tra cho biết quy trình đã hoàn tất hay chưa. Như minh hoạ trong ví dụ bên dưới:

Sẽ mất một khoảng thời gian để hoàn thành các tác vụ của nó. Trong khi chờ đợi, chúng ta có thể kiểm tra nguồn của các tiện ích này trong kho lưu trữ Github. URL này cho thấy lời nhắc được dùng để chạy tất cả quy trình quét bảo mật này

Như bạn có thể thấy, để thực hiện việc quét này, hãy dùng câu lệnh Gemini CLI để thực hiện quy trình kiểm tra hai lượt, Lượt trinh sát và Lượt điều tra chi tiết hơn.
Nếu gặp lời nhắc sau đây trong Gemini CLI, bạn có thể chọn lựa chọn 2 để tắt tính năng phát hiện vòng lặp

Sau đó, hãy nhắc Gemini CLI tiếp tục

continue
Đây là một cơ chế để tránh các vòng lặp gọi công cụ vô tận không hiệu quả và sẽ tiếp tục được cải thiện theo thời gian.
Sau khi hoàn tất, báo cáo sẽ xuất hiện trên thiết bị đầu cuối tương tác. Để dễ dàng hơn, hãy hướng dẫn Gemini CLI ghi báo cáo vào security-analysis.md

write the result to security-analysis.md file
Giờ đây, bạn có thể kiểm tra kết quả được ghi vào tệp
7. 🚀 Chế độ không tương tác – Ứng dụng tiện ích xem xét mã
Tiện ích code-review sẽ thêm một lệnh mới vào Gemini CLI để phân tích các thay đổi về mã nhằm xác định nhiều vấn đề về chất lượng mã.
Tiện ích này có thể được thực thi ở chế độ không tương tác của Gemini CLI, tức là bạn có thể thực thi toàn bộ quy trình mà không cần nhập trình bao Gemini CLI. Để chạy Gemini CLI ở chế độ không tương tác, bạn có thể thực hiện bằng mẫu lệnh sau
gemini "put your command here"
Tuy nhiên, bạn cần lưu ý rằng khi chạy ở chế độ không tương tác, mọi thao tác của công cụ yêu cầu quyền của người dùng sẽ bị vô hiệu hoá. Do đó, chúng ta cần thêm cờ --yolo để tự động phê duyệt tất cả các hành động, tức là bật tất cả các công cụ trong chế độ không tương tác
Hãy chạy tiện ích code-review bằng lệnh sau
gemini "/code-review" --yolo -e code-review > code-review.md
Lệnh này sẽ ghi kết quả của đầu ra Gemini CLI vào tệp code-review.md. Lưu ý cờ -e ở đây, cờ này kiểm soát tiện ích nào sẽ kích hoạt trong phiên. Ở đây, chúng ta chỉ kích hoạt tiện ích code-review và tắt các tiện ích khác.
Quá trình này sẽ mất một lúc, nhưng sau khi hoàn tất, bạn có thể thấy kết quả tương tự như kết quả được ghi vào tệp đánh dấu bên dưới
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. 🚀 Hỗ trợ giao thức ngữ cảnh mô hình
Giờ đây, như chúng ta đã kiểm tra trước đó trong phần giải thích về tiện ích, Gemini CLI có thể kết nối với các máy chủ MCP – những ứng dụng cung cấp các công cụ và tài nguyên thông qua Giao thức ngữ cảnh mô hình. Mối kết nối này cho phép Gemini CLI tương tác với các hệ thống và nguồn dữ liệu bên ngoài bằng cách sử dụng các máy chủ MCP làm cầu nối đến môi trường cục bộ và các dịch vụ bên ngoài như API.

Nếu muốn tự thiết lập máy chủ MCP, bạn cần sửa đổi tệp .gemini/settings.json và thêm các cấu hình sau :
{
...
# Previous settings above if any
"mcpServers": {
"server_name": {
# MCP server configurations here
}
}
}
Trong hướng dẫn này, hãy định cấu hình kết nối với tài khoản Github của bạn để đẩy dữ liệu báo cáo trước đó vào Github
Định cấu hình máy chủ MCP của GitHub
Trước tiên, hãy tạo tệp cấu hình dự án Gemini CLI. Chạy lệnh sau
mkdir -p .gemini && touch .gemini/settings.json
Sau đó, mở tệp .gemini/settings.json rồi điền cấu hình sau vào
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "your-personal-access-token"
},
"timeout": 5000
}
}
}
Bây giờ, chúng ta sẽ cần mã truy cập cá nhân của riêng bạn trên Github. Do đó, hãy đảm bảo bạn đã có tài khoản Github của riêng mình.
Đăng nhập vào Github rồi chuyển đến phần Settings (Cài đặt)

Sau đó, hãy di chuyển xuống để tìm Cài đặt cho nhà phát triển rồi nhấp vào đó

Sau đó, chọn Personal access tokens (Mã truy cập cá nhân) rồi chọn Tokens (classic) (Mã thông báo (cổ điển))


Đặt tên cho mã truy cập cá nhân của bạn tại đây và kiểm tra các phạm vi repo

Sau đó, di chuyển xuống rồi nhấp vào nút Generate Token (Tạo mã thông báo), hãy nhớ
Nhấp vào nút Tạo mã thông báo mới rồi chọn Tạo mã thông báo mới (cổ điển). Sau đó, hãy sao chép mã thông báo đã tạo và ghi mã đó vào .gemini/settings.json

Vì vậy, tệp .gemini/settings.json của bạn sẽ có dạng như ví dụ sau
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "ghp-xxxx"
},
"timeout": 5000
}
}
}
Bây giờ, hãy xác minh kết nối. Nhập Gemini CLI bằng cách chạy lệnh sau
gemini
Sau đó, chạy lệnh /mcp, bạn sẽ thấy MCP Github đã được định cấu hình đúng cách

/mcp
Sau đó, hãy kiểm thử kết nối MCP này bằng cách gửi lệnh sau

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
Lưu ý ký hiệu @code-review.md và @security-analysis.md tại đây, đây là cách chúng ta tham chiếu các tệp sẽ được truyền đến Gemini CLI. Lệnh này sẽ đọc nội dung của cả hai tệp và gửi một bình luận đến Yêu cầu hợp nhất liên quan đến nhánh này bằng cách sử dụng kết nối MCP của Github. Sau đó, bạn có thể kiểm tra URL yêu cầu kéo để xác minh.

9. 💡Gemini CLI trong quy trình CI/CD
Nếu là người dùng GitHub, bạn có thể dễ dàng nhúng Gemini CLI vào quy trình CI/CD bằng cách sử dụng run-gemini-cli GitHub Action. Đây vừa là một tác nhân tự động cho các công việc lập trình thường xuyên quan trọng, vừa là một cộng tác viên theo yêu cầu mà bạn có thể nhanh chóng uỷ quyền công việc
Bạn có thể sử dụng công cụ này để xem xét yêu cầu kéo, phân loại vấn đề, phân tích và sửa đổi mã, cũng như làm nhiều việc khác bằng cách trò chuyện với Gemini ngay trong kho lưu trữ GitHub
Bạn có thể kiểm tra ví dụ về quy trình tích hợp này trong yêu cầu kéo này. Trong đó, chúng tôi sử dụng tiện ích Bảo mật Gemini CLI bên trong trình chạy và đưa ra các đánh giá khi Yêu cầu kéo được tạo




10. 💡Khám phá các tiện ích khác của Gemini CLI

Bạn cũng có thể khám phá thêm các tiện ích tại https://geminicli.com/extensions . Hãy khám phá để biết thêm nhiều công cụ thú vị khác!
11. 🧹 Dọn dẹp
Để tránh phát sinh phí cho tài khoản Google Cloud của bạn đối với các tài nguyên được dùng trong lớp học lập trình này, hãy làm theo các bước sau:
- Trong Google Cloud Console, hãy chuyển đến trang Quản lý tài nguyên.
- Trong danh sách dự án, hãy chọn dự án mà bạn muốn xoá, rồi nhấp vào Xoá.
- Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Tắt để xoá dự án.