1. 📖 Введение

В этой лабораторной работе вы изучите основы Gemini CLI и будете использовать его расширение для обзора кода и анализа безопасности в рабочем процессе разработки программного обеспечения.
Чему вы научитесь
- Как настроить Gemini CLI
- Как настроить Gemini CLI
- Как установить расширение Gemini CLI
- Как использовать расширение Gemini CLI для проверки кода и анализа безопасности
- Как настроить MCP для Gemini CLI
- Как проверить Gemini CLI в CI/CD
Что вам понадобится
- веб-браузер Chrome
- Аккаунт Gmail
- Облачный проект с включенным платежным аккаунтом
2. 🚀 Подготовка к разработке семинара
Шаг 1: Выберите активный проект в облачной консоли.
В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud (см. верхнюю левую часть консоли).

Нажмите на него, и вы увидите список всех ваших проектов, как в этом примере,

Значение, указанное в красной рамке, является ИДЕНТИФИКАТОРОМ ПРОЕКТА , и это значение будет использоваться на протяжении всего урока.
Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Для этого нажмите на значок бургера ☰ в левом верхнем углу панели, где отображается меню навигации, и найдите меню «Выставление счетов».


Если вы видите «Пробный платёжный аккаунт Google Cloud Platform» в разделе «Биллинг/Обзор» ( в левом верхнем углу облачной консоли ), ваш проект готов к использованию в рамках этого руководства. Если нет, вернитесь к началу руководства и активируйте пробный платёжный аккаунт.

Шаг 2: Знакомство с Cloud Shell
В большинстве обучающих программ вы будете использовать Cloud Shell . Нажмите «Активировать Cloud Shell» в верхней части консоли Google Cloud. Если появится запрос на авторизацию, нажмите «Авторизовать».


После подключения к Cloud Shell нам нужно будет проверить, аутентифицирована ли оболочка (или терминал) с помощью нашей учетной записи.
gcloud auth list
Если вы видите свой личный Gmail, как в примере ниже, все в порядке.
Credentialed Accounts
ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com
To set the active account, run:
$ gcloud config set account `ACCOUNT`
Если нет, попробуйте обновить браузер и обязательно нажмите кнопку «Авторизовать» при появлении соответствующего запроса (возможно, процесс был прерван из-за проблем с подключением).
Далее нам также необходимо проверить, настроена ли оболочка на правильный идентификатор ПРОЕКТА , который у вас есть. Если вы видите значение внутри ( ) перед значком $ в терминале (на снимке экрана ниже это значение «your-workshop-project» ), это значение показывает настроенный проект для вашего активного сеанса оболочки.

Если отображаемое значение верно , вы можете пропустить следующую команду . Однако, если оно неверно или отсутствует, выполните следующую команду.
gcloud config set project <YOUR_PROJECT_ID>
Шаг 3: Знакомство с редактором Cloud Shell и настройка рабочего каталога приложения
Теперь мы можем настроить наш редактор кода для написания кода. Для этого мы будем использовать Cloud Shell Editor.
Нажмите кнопку «Открыть редактор» , чтобы открыть редактор Cloud Shell. 
Теперь вы увидите интерфейс Cloud Shell Editor, как показано ниже.

Теперь клонируем демонстрационный репозиторий, с которым мы будем работать. Для начала нам нужно открыть терминал для редактора. Это можно сделать, нажав «Терминал» -> «Новый терминал» в строке меню или нажав 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 Editor должен выглядеть так:

Теперь мы можем перейти к следующему этапу.
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, и вам останется только принять ее.
- Если вы предпочитаете использовать ключ API Gemini , вам нужно будет создать его на странице AI Studio , а затем создать файл .env в вашем рабочем каталоге с установленной переменной GEMINI_API_KEY (или выполнить команду
export GEMINI_API_KEY="your-api-key"в командной строке). - Если вы решите использовать Vertex AI, вам понадобится проект, подобный тому, который вы настроили ранее, а также создайте файл .env и задайте параметры GOOGLE_CLOUD_PROJECT и GOOGLE_CLOUD_LOCATION.
Если вы хотите изменить эти методы аутентификации, выполните команду /auth в интерфейсе командной строки Gemini или отредактируйте файл конфигурации. Если вы хотите редактировать файл конфигурации напрямую, в 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 — это агент искусственного интеллекта, поэтому он будет оснащен инструментами для решения поставленной пользователем задачи. Чтобы увидеть встроенные инструменты, выполните команду /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. 🚀 Расширения
Чтобы улучшить результаты выполнения конкретной задачи с помощью ИИ-агента, необходимо решить следующие сложные вопросы: как создать правильную подсказку, как управлять правильной разработкой контекста с правильной интеграцией инструментов и т. д.
Gemini CLI Extensions — это готовые и легко устанавливаемые подсказки и интеграции, которые можно подключать к внешним инструментам. Каждое расширение содержит встроенную инструкцию по эффективному использованию инструментов и может состоять из следующих компонентов:
- Пользовательские слэш-команды
- Конфигурации 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 . Этот URL-адрес показывает командную строку, используемую для запуска всех этих процессов сканирования безопасности.

Как вы можете видеть, для этого нужно отсканировать подсказку в виде 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 и отключаем остальные.
Это займет некоторое время, но после завершения вы увидите результат, аналогичный показанному ниже, записанный в файл разметки.
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. 🚀 Поддержка протокола контекста модели
Как мы уже упоминали в пояснениях к расширению, Gemini CLI может подключаться к серверам MCP — приложениям, предоставляющим инструменты и ресурсы, через протокол контекста модели. Это подключение позволяет 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 и перейдите в Настройки.

После этого прокрутите вниз, чтобы найти раздел «Настройки разработчика» , и нажмите на него.

Затем выберите « Персональные токены доступа» и выберите «Токены (классические) ».


Укажите здесь имя вашего личного токена доступа и проверьте области действия репозитория.

Затем прокрутите вниз и нажмите кнопку «Сгенерировать токен» , убедитесь, что вы
Нажмите кнопку «Сгенерировать новый токен» и выберите « Сгенерировать новый токен (классический) ». После этого скопируйте сгенерированный токен и запишите его в файл .gemini/settings.json.

Итак, ваш .gemini/settings.json должен выглядеть, как в следующем примере
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "ghp-xxxx"
},
"timeout": 5000
}
}
}
Теперь проверим подключение. Войдите в командную строку Gemini, выполнив следующую команду:
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. После этого вы можете проверить его, перейдя по URL запроса на извлечение .

9. 💡Gemini CLI в рабочем процессе CI/CD
Если вы являетесь пользователем Github, вы можете легко встроить Gemini CLI в свой конвейер непрерывной интеграции/разработки (CI/CD) с помощью действия Github run-gemini-cli . Оно действует как автономный агент для критически важных рутинных задач по написанию кода, так и как инструмент совместной работы по запросу, которому можно быстро делегировать работу.
Вы можете использовать его для проверки запросов на включение внесенных изменений, сортировки проблем, анализа и модификации кода, а также для многого другого, используя Gemini в режиме диалога непосредственно в репозиториях Github.
Пример этой интеграции можно увидеть в этом запросе на извлечение , где мы используем расширение Gemini CLI Security внутри бегуна и предоставляем отзывы при создании запроса на извлечение.




10. 💡Изучите другие расширения Gemini CLI

Вы также можете ознакомиться с другими расширениями на сайте https://geminicli.com/extensions . Там вы найдете ещё больше интересных инструментов!
11. 🧹 Уборка
Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, используемые в этой лабораторной работе, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу Управление ресурсами .
- В списке проектов выберите проект, который вы хотите удалить, а затем нажмите Удалить .
- В диалоговом окне введите идентификатор проекта, а затем нажмите кнопку «Завершить», чтобы удалить проект.