1. 📖 Introducción

En este codelab, aprenderás los conceptos básicos de la CLI de Gemini y utilizarás su extensión de revisión de código y análisis de seguridad en tu flujo de trabajo de desarrollo de software.
Qué aprenderás
- Cómo configurar Gemini CLI
- Cómo configurar Gemini CLI
- Cómo instalar la extensión de Gemini CLI
- Cómo utilizar la extensión de Gemini CLI para la revisión de código y el análisis de seguridad
- Cómo configurar MCP para la CLI de Gemini
- Cómo inspeccionar la CLI de Gemini en CI/CD
Requisitos
- Navegador web Chrome
- Una cuenta de Gmail
- Un proyecto de Cloud con una cuenta de facturación habilitada
2. 🚀 Preparación de la configuración de desarrollo del taller
Paso 1: Selecciona el proyecto activo en la consola de Cloud
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud (consulta la sección superior izquierda de la consola).

Haz clic en él y verás una lista de todos tus proyectos, como en este ejemplo:

El valor que se indica con el cuadro rojo es el ID DEL PROYECTO, y se usará en todo el instructivo.
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Para verificarlo, haz clic en el ícono de hamburguesa ☰ en la barra superior izquierda, que muestra el menú de navegación, y busca el menú Facturación.


Si ves "Cuenta de facturación de la prueba de Google Cloud Platform" debajo del título Facturación / Descripción general ( sección superior izquierda de tu consola de Cloud), tu proyecto está listo para usarse en este instructivo. De lo contrario, vuelve al inicio de este instructivo y canjea la cuenta de facturación de prueba.

Paso 2: Familiarízate con Cloud Shell
Usarás Cloud Shell durante la mayor parte de los instructivos. Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud. Si se te solicita autorización, haz clic en Autorizar.


Una vez que te conectes a Cloud Shell, deberemos verificar si el shell ( o la terminal) ya se autenticó con nuestra cuenta.
gcloud auth list
Si ves tu Gmail personal como en el siguiente ejemplo de resultado, todo está bien.
Credentialed Accounts
ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com
To set the active account, run:
$ gcloud config set account `ACCOUNT`
Si no es así, intenta actualizar el navegador y asegúrate de hacer clic en Autorizar cuando se te solicite ( es posible que se interrumpa debido a un problema de conexión).
A continuación, también debemos verificar si la shell ya está configurada con el ID DEL PROYECTO correcto que tienes. Si ves que hay un valor dentro de ( ) antes del ícono $ en la terminal ( en la captura de pantalla a continuación, el valor es "your-workshop-project"), este valor muestra el proyecto configurado para tu sesión de shell activa.

Si el valor que se muestra ya es correcto, puedes omitir el siguiente comando. Sin embargo, si no es correcto o falta, ejecuta el siguiente comando:
gcloud config set project <YOUR_PROJECT_ID>
Paso 3: Familiarízate con el editor de Cloud Shell y configura el directorio de trabajo de la aplicación
Ahora, podemos configurar nuestro editor de código para hacer algunas cosas de programación. Usaremos el editor de Cloud Shell para esto.
Haz clic en el botón Abrir editor para abrir un editor de Cloud Shell
.
Ahora verás la interfaz del editor de Cloud Shell, como se muestra a continuación.

Ahora, clona el repositorio de demostración con el que interactuaremos. Primero, debemos abrir la terminal del editor. Para ello, haz clic en Terminal -> New Terminal en la barra de menú o usa Ctrl + Mayúsculas + C. Se abrirá una ventana de terminal en la parte inferior del navegador.

Luego, ejecuta este comando en la terminal
git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo
Después, ve a la sección superior del editor de Cloud Shell y haz clic en File->Open Folder, busca tu directorio de nombre de usuario y el directorio del repositorio clonado code-analysis-demo y, luego, haz clic en el botón Aceptar. Esto convertirá el directorio elegido en el directorio de trabajo principal. En este ejemplo, el nombre de usuario es alvinprayuda, por lo que la ruta de acceso del directorio se muestra a continuación.


Ahora, tu directorio de trabajo del editor de Cloud Shell debería verse así:

Ahora podemos pasar a la siguiente fase.
3. 🚀 Configuración
Si deseas instalar Gemini CLI en tu sistema local, puedes seguir estos pasos:
- Asegúrate de que tu sistema tenga Node versión 20 o posterior.
- Habilita la CLI de Gemini de una de las siguientes maneras:
- Instalarlo como paquete global
# Install as an executor
npm install -g @google/gemini-cli
# then run it from terminal
gemini
- O bien, ejecútalo directamente desde la fuente para obtener siempre la versión más reciente.
npx https://github.com/google-gemini/gemini-cli
Cuando lo ejecutes por primera vez, te hará varias preguntas. Si lo ejecutas desde un IDE (p.ej., VSCode), te hará la siguiente pregunta:

Luego, te pedirá varias opciones para autenticarte.

Tienes las siguientes opciones:
- Si eliges Acceder con Google, se abrirá una página de autenticación de Google en el navegador, y solo deberás aceptarla.
- Si prefieres usar la clave de API de Gemini, deberás crear una en la página de AI Studio y, luego, crear el archivo .env en tu directorio de trabajo con la variable GEMINI_API_KEY establecida ( o ejecutar el comando
export GEMINI_API_KEY="your-api-key"en la línea de comandos). - Si eliges usar Vertex AI, necesitarás un proyecto como el que configuraste anteriormente, crear un archivo .env y establecer GOOGLE_CLOUD_PROJECT y GOOGLE_CLOUD_LOCATION.
Si deseas cambiar estos métodos de autenticación, puedes ejecutar el comando /auth desde la CLI de Gemini o editar el archivo de configuración. Si deseas editar el archivo de configuración directamente, en Linux debe estar en $HOME/.gemini/settings.json . Verás el tipo security y auth, y podrás editarlo.
{
"security": {
"auth": {
"selectedType": "vertex-ai" # or "gemini-api-key" or "oauth-personal"
}
}
}

4. 🚀 Comandos básicos y herramientas integradas
Ahora, exploremos la CLI de Gemini para obtener más información sobre ella. Si buscas algún comando básico que puedas usar, puedes escribir /help para mostrar todos los comandos disponibles.

/help
Verás un resultado como este 
La CLI de Gemini es un agente de IA, por lo que tendrá herramientas equipadas para resolver la tarea que le asigne el usuario. Para ver las herramientas integradas que tiene, ejecuta el comando /tools.

/tools
Verás un resultado como este:

Puedes ver que la CLI de Gemini tiene varias capacidades, como leer y escribir en archivos, realizar búsquedas en la Web y muchas más. Varias de estas herramientas requerían la confirmación del usuario de forma predeterminada debido al riesgo potencial.
Ahora veamos cómo funciona. Intenta ejecutar estas instrucciones en la CLI de Gemini

Find top 10 OWASP security issue and write it down to owasp.md
Verás que invocará la herramienta GoogleSearch y, luego, escribirá el resultado con la herramienta WriteFile. Y si utilizas un IDE, verás que se presentará como una opción de diff y de visualización para que aceptes o rechaces las sugerencias. Aquí, puedes ver que la CLI de Gemini te pide permiso para escribir el archivo.

5. 🚀 Extensiones
Para mejorar el resultado de una tarea específica con un agente de IA, los aspectos más difíciles son cómo crear una instrucción adecuada, administrar una ingeniería de contexto adecuada con la integración de herramientas adecuadas, etcétera.
Las extensiones de Gemini CLI son integraciones y mensajes preempaquetados y fáciles de instalar que se pueden conectar a herramientas externas. Cada extensión contiene una "guía" integrada sobre cómo usar las herramientas de manera eficaz y puede estar compuesta por los siguientes componentes:
- Comandos de barra personalizados
- Configuraciones de MCP
- Archivos de contexto

Cómo instalar extensiones de seguridad
Por ejemplo, en este instructivo, exploraremos cómo se pueden instalar las extensiones code-review y security.
Ejecuta el siguiente comando para instalar las extensiones de security desde la terminal.
gemini extensions install https://github.com/gemini-cli-extensions/security
Se mostrarán las siguientes preguntas. Presiona Intro para aceptar.
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ómo instalar extensiones de revisión de código
A continuación, instalemos la extensión code-review. Para ello, ejecuta el siguiente comando:
gemini extensions install https://github.com/gemini-cli-extensions/code-review
Cuando termines, vuelve a ejecutar Gemini CLI.
gemini
y ejecuta el comando /extensions, verás que estas 2 extensiones ya están instaladas.

/extensions
Bien, ahora hagamos una ejecución práctica en el repositorio de muestra que clonaste anteriormente.
6. 🚀 Modo interactivo: Aplicación de extensión de análisis de seguridad del código
La extensión de seguridad es una extensión de código abierto de Gemini CLI creada para mejorar la seguridad del repositorio. La extensión agrega un nuevo comando a Gemini CLI que analiza los cambios de código para identificar una variedad de riesgos y vulnerabilidades de seguridad.
Ahora, primero preparemos nuestro repositorio de demostración. Ejecuta el siguiente comando para cambiar a la rama en la que ya se aplicaron los cambios con riesgo de seguridad.
git checkout refactor/analysis-demo
Después de eso, ejecuta la Gemini CLI en la terminal.
gemini
Luego, ejecutemos las extensiones.

/security:analyze
Esto iniciará un proceso de larga duración y, durante el proceso, recibirás varias interrupciones que te solicitarán permiso para ejecutar operaciones específicas, como mkdir, como se muestra a continuación.

Este es un mecanismo de protección para garantizar que los usuarios sepan qué ejecutará la CLI de Gemini. Para el resto del instructivo, siempre puedes permitirlo ( opción 2).
Esta extensión invocará un proceso de larga duración. Podrás ver cómo se crea un archivo de planificación dentro del directorio .gemini_security y ver la lista de tareas pendientes que indica qué proceso se completó y cuál no. Como se muestra en el siguiente ejemplo:

Llevará un tiempo completar sus tareas. Mientras tanto, podemos consultar el código fuente de estas extensiones en el repositorio de GitHub. Esta URL muestra la instrucción que se usa para ejecutar todo este proceso de análisis de seguridad.

Como puedes ver, para realizar este análisis, se le indica a Gemini CLI que haga una verificación de dos pasos: el Paso de reconocimiento y el Paso de investigación más detallado.
Si ves la siguiente instrucción en la Gemini CLI, puedes elegir la opción 2 para inhabilitar la detección de bucles.

Luego, pídele a Gemini CLI que continúe.

continue
Este es un mecanismo para evitar bucles infinitos de llamadas a herramientas no productivas y seguirá mejorando con el tiempo.
Una vez que termine, mostrará el informe en la terminal interactiva. Para que esto sea más fácil, indiquemos a Gemini CLI que lo escriba en security-analysis.md.

write the result to security-analysis.md file
Ahora puedes inspeccionar el resultado escrito en el archivo
7. 🚀 Modo no interactivo: Solicitud de extensión de revisión de código
La extensión code-review agrega un nuevo comando a la CLI de Gemini que analiza los cambios de código para identificar una variedad de problemas de calidad del código.
Esta extensión se puede ejecutar en el modo no interactivo de Gemini CLI, lo que significa que todo el proceso se puede ejecutar sin necesidad de ingresar a la shell de Gemini CLI. Para ejecutar Gemini CLI en modo no interactivo, puedes usar el siguiente patrón de comando:
gemini "put your command here"
Sin embargo, es importante tener en cuenta que, si se ejecuta en modo no interactivo, se inhabilitará cualquier operación de herramientas que requiera permiso del usuario, por lo que debemos agregar la marca --yolo para aprobar automáticamente todas las acciones, lo que significa habilitar todas las herramientas durante el modo no interactivo.
Ejecutemos la extensión code-review con el siguiente comando:
gemini "/code-review" --yolo -e code-review > code-review.md
Con este comando, se escribirá el resultado de la salida de la Gemini CLI en el archivo code-review.md. Observa la marca -e aquí, ya que controla qué extensión se activará durante la sesión. Aquí solo activamos la extensión code-review y desactivamos las demás.
Tardará un poco, pero, cuando termine, verás un resultado similar al que se muestra a continuación escrito en el archivo 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. 🚀 Compatibilidad con el Protocolo de contexto del modelo
Ahora, como ya vimos en las explicaciones de la extensión, Gemini CLI puede conectarse a servidores de MCP, es decir, aplicaciones que proporcionan herramientas y recursos a través del Protocolo de contexto del modelo. Esta conexión permite que la CLI de Gemini interactúe con sistemas externos y fuentes de datos a través de servidores de MCP como puentes hacia tu entorno local y servicios externos, como las APIs.

Si deseas configurar tu propio servidor de MCP, debes modificar el archivo .gemini/settings.json y agregar las siguientes configuraciones :
{
...
# Previous settings above if any
"mcpServers": {
"server_name": {
# MCP server configurations here
}
}
}
En este instructivo, configuraremos la conexión con nuestra cuenta de GitHub para enviar los datos del informe anterior a GitHub.
Cómo configurar el servidor de MCP de GitHub
Primero, creemos nuestro archivo de configuración del proyecto de la CLI de Gemini. Ejecuta el siguiente comando:
mkdir -p .gemini && touch .gemini/settings.json
Luego, abre el archivo .gemini/settings.json y complétalo con la siguiente configuración.
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "your-personal-access-token"
},
"timeout": 5000
}
}
}
Ahora, necesitaremos tu propio token de acceso personal de GitHub aquí, por lo que debes asegurarte de tener tu propia cuenta de GitHub.
Accede a tu cuenta de GitHub y ve a Configuración.

Luego, desplázate hacia abajo para encontrar la opción Configuración para desarrolladores y haz clic en ella.

Luego, selecciona Tokens de acceso personal y elige Tokens (clásico).


Ingresa el nombre de tu token de acceso personal aquí y marca los permisos de repo.

Luego, desplázate hacia abajo y haz clic en el botón Generar token. Asegúrate de
Haz clic en el botón Generate new token y selecciona el botón Generate new token (clásico). Luego, copia el token generado y escríbelo en .gemini/settings.json.

Por lo tanto, tu archivo .gemini/settings.json debería verse como el siguiente ejemplo:
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "ghp-xxxx"
},
"timeout": 5000
}
}
}
Ahora, verifiquemos la conexión. Ejecuta este comando para ingresar a Gemini CLI
gemini
Luego, ejecuta el comando /mcp. Deberías ver que el MCP de GitHub ya está configurado correctamente.

/mcp
Luego, probemos esta conexión de MCP enviando este comando

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
Ten en cuenta la notación @code-review.md y @security-analysis.md aquí, ya que así hacemos referencia a los archivos que se pasarán a Gemini CLI. Este comando leerá el contenido de ambos archivos y enviará un comentario a la solicitud de extracción relacionada con esta rama a través de la conexión de MCP de GitHub. Después, puedes verificarlo en la URL de la solicitud de extracción.

9. 💡Gemini CLI en el flujo de trabajo de CI/CD
Si eres usuario de GitHub, puedes incorporar fácilmente Gemini CLI en tu canalización de CI/CD con la acción de run-gemini-cli de GitHub. Actúa como un agente autónomo para tareas de programación rutinarias críticas y como un colaborador a pedido al que puedes delegar trabajo rápidamente.
Puedes usarlo para realizar revisiones de solicitudes de extracción, clasificar problemas, realizar análisis y modificaciones de código, y mucho más, todo de forma conversacional con Gemini directamente en los repositorios de GitHub.
El ejemplo de esta integración se puede inspeccionar en esta solicitud de extracción, en la que utilizamos la extensión de seguridad de Gemini CLI dentro del ejecutor y proporcionamos las revisiones cuando se crea la solicitud de extracción.




10. 💡Explora otras extensiones de Gemini CLI

También puedes explorar más extensiones en https://geminicli.com/extensions . ¡Échale un vistazo para conocer más herramientas interesantes!
11. 🧹 Limpieza
Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en este codelab:
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que deseas borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.