1. 📖 Introduction

Dans cet atelier de programmation, vous allez découvrir les principes de base de l'interface de ligne de commande Gemini et utiliser son extension d'analyse du code et de la sécurité dans votre workflow de développement logiciel.
Points abordés
- Configurer la CLI Gemini
- Configurer la CLI Gemini
- Installer l'extension Gemini CLI
- Utiliser l'extension Gemini CLI pour l'examen du code et l'analyse de la sécurité
- Configurer MCP pour la CLI Gemini
- Inspecter la CLI Gemini dans CI/CD
Prérequis
- Navigateur Web Chrome
- Un compte Gmail
- Un projet Cloud pour lequel un compte de facturation est activé
2. 🚀 Préparer la configuration de développement de l'atelier
Étape 1 : Sélectionnez le projet actif dans la console Cloud
Dans la console Google Cloud, sur la page du sélecteur de projet, sélectionnez ou créez un projet Google Cloud (voir la section en haut à gauche de la console).

Cliquez dessus pour afficher la liste de tous vos projets, comme dans cet exemple :

La valeur indiquée par l'encadré rouge correspond à l'ID du projet. Elle sera utilisée tout au long du tutoriel.
Assurez-vous que la facturation est activée pour votre projet Cloud. Pour vérifier cela, cliquez sur l'icône ☰ en haut à gauche de la barre pour afficher le menu de navigation, puis recherchez le menu "Facturation".


Si vous voyez le compte de facturation de l'essai Google Cloud Platform sous le titre Facturation / Présentation ( en haut à gauche de la console Cloud), votre projet est prêt à être utilisé pour ce tutoriel. Si ce n'est pas le cas, revenez au début de ce tutoriel et utilisez le compte de facturation de l'essai.

Étape 2 : Familiarisez-vous avec Cloud Shell
Vous utiliserez Cloud Shell pour la majeure partie des tutoriels. Cliquez sur "Activer Cloud Shell" en haut de la console Google Cloud. Si vous êtes invité à donner votre autorisation, cliquez sur Autoriser.


Une fois connecté à Cloud Shell, nous devons vérifier si le shell ( ou le terminal) est déjà authentifié avec notre compte.
gcloud auth list
Si votre adresse Gmail personnelle s'affiche comme dans l'exemple ci-dessous, tout est en ordre.
Credentialed Accounts
ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com
To set the active account, run:
$ gcloud config set account `ACCOUNT`
Si ce n'est pas le cas, essayez d'actualiser votre navigateur et assurez-vous de cliquer sur Autoriser lorsque vous y êtes invité ( la connexion peut être interrompue en raison d'un problème de connexion).
Ensuite, nous devons également vérifier si le shell est déjà configuré avec le bon ID de projet. Si une valeur est affichée entre parenthèses avant l'icône $ dans le terminal (dans la capture d'écran ci-dessous, la valeur est "your-workshop-project"), cela indique le projet configuré pour votre session de shell active.

Si la valeur affichée est déjà correcte, vous pouvez ignorer la commande suivante. Toutefois, si elle est incorrecte ou manquante, exécutez la commande suivante :
gcloud config set project <YOUR_PROJECT_ID>
Étape 3 : Familiarisez-vous avec l'éditeur Cloud Shell et configurez le répertoire de travail de l'application
Nous pouvons maintenant configurer notre éditeur de code pour effectuer certaines tâches de codage. Pour cela, nous allons utiliser l'éditeur Cloud Shell.
Cliquez sur le bouton Ouvrir l'éditeur pour ouvrir l'éditeur Cloud Shell
.
L'interface de l'éditeur Cloud Shell s'affiche, comme illustré ci-dessous.

Clonez maintenant le dépôt de démonstration avec lequel nous allons interagir. Nous devons d'abord ouvrir le terminal pour l'éditeur. Pour ce faire, cliquez sur Terminal > Nouveau terminal dans la barre de menu ou utilisez le raccourci clavier Ctrl+Maj+C. Une fenêtre de terminal s'ouvrira en bas du navigateur.

Exécutez ensuite cette commande dans le terminal.
git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo
Ensuite, accédez à la section supérieure de l'éditeur Cloud Shell et cliquez sur File > Open Folder (Fichier > Ouvrir le dossier). Recherchez votre répertoire nom d'utilisateur, puis le répertoire du dépôt cloné code-analysis-demo, puis cliquez sur le bouton OK. Le répertoire choisi deviendra le répertoire de travail principal. Dans cet exemple, le nom d'utilisateur est alvinprayuda. Le chemin d'accès au répertoire est donc indiqué ci-dessous.


Votre répertoire de travail de l'éditeur Cloud Shell devrait maintenant se présenter comme suit :

Nous pouvons maintenant passer à la phase suivante.
3. 🚀 Configuration
Si vous souhaitez installer la Gemini CLI sur votre système local, vous pouvez suivre ces étapes :
- Assurez-vous que votre système dispose de Node version 20 ou ultérieure.
- Activez la CLI Gemini en procédant de l'une des manières suivantes :
- Installation en tant que package global
# Install as an executor
npm install -g @google/gemini-cli
# then run it from terminal
gemini
- Vous pouvez également l'exécuter directement à partir de la source pour toujours obtenir la dernière version.
npx https://github.com/google-gemini/gemini-cli
Lorsque vous l'exécutez pour la première fois, plusieurs questions vous sont posées. Si vous l'exécutez à partir d'un IDE (par exemple, VSCode), la question suivante vous sera posée :

Il vous proposera ensuite plusieurs options d'authentification.

Plusieurs possibilités s'offrent à vous :
- Si vous choisissez Se connecter avec Google, une page d'authentification Google s'ouvre dans le navigateur. Il vous suffit de l'accepter.
- Si vous préférez utiliser une clé API Gemini, vous devrez en créer une sur la page AI Studio, puis créer un fichier .env dans votre répertoire de travail avec la variable GEMINI_API_KEY définie ( ou exécuter la commande
export GEMINI_API_KEY="your-api-key"sur la ligne de commande). - Si vous choisissez d'utiliser Vertex AI,vous aurez besoin d'un projet comme celui que vous avez configuré précédemment. Vous devrez également créer un fichier .env et définir les variables GOOGLE_CLOUD_PROJECT et GOOGLE_CLOUD_LOCATION.
Si vous souhaitez modifier ces méthodes d'authentification, vous pouvez exécuter la commande /auth à partir de la CLI Gemini ou modifier le fichier de configuration. Si vous souhaitez modifier directement le fichier de configuration, il devrait se trouver sous Linux dans $HOME/.gemini/settings.json . Vous verrez le type security et auth. Modifiez-le.
{
"security": {
"auth": {
"selectedType": "vertex-ai" # or "gemini-api-key" or "oauth-personal"
}
}
}

4. 🚀 Commandes de base et outils intégrés
Maintenant, jouons avec la CLI Gemini pour en savoir plus. Si vous recherchez des commandes de base à utiliser, vous pouvez saisir /help pour afficher toutes les commandes disponibles.

/help
Le résultat doit ressembler à ceci : 
La CLI Gemini est un agent d'IA. Elle dispose donc d'outils pour résoudre la tâche confiée par l'utilisateur. Pour afficher les outils intégrés, exécutez la commande /tools.

/tools
Le résultat doit ressembler à ceci :

Vous pouvez constater que la CLI Gemini possède plusieurs fonctionnalités, comme la lecture et l'écriture dans des fichiers, la recherche sur le Web et bien d'autres. Plusieurs de ces outils nécessitaient une confirmation de l'utilisateur par défaut en raison du risque potentiel.
Voyons maintenant comment cela fonctionne en exécutant ces requêtes dans Gemini CLI.

Find top 10 OWASP security issue and write it down to owasp.md
Vous verrez qu'il invoquera l'outil GoogleSearch et qu'il écrira ensuite le résultat à l'aide de l'outil WriteFile. Si vous utilisez un IDE, vous verrez que les suggestions sont présentées sous forme de diff et d'option d'affichage, ce qui vous permet de les accepter ou de les refuser. Ici, vous pouvez voir que la CLI Gemini vous demande l'autorisation d'écrire le fichier.

5. 🚀 Extensions
Pour améliorer le résultat d'une tâche spécifique avec un agent d'IA, les difficultés résident dans la façon de rédiger une requête appropriée, de gérer une ingénierie contextuelle appropriée avec une intégration d'outils appropriée, etc.
Les extensions Gemini CLI sont des intégrations et des requêtes préconfigurées et faciles à installer qui peuvent se connecter à des outils externes. Chaque extension contient un "playbook" intégré sur la façon d'utiliser efficacement les outils. Elle peut se composer des éléments suivants :
- Commandes à barre oblique personnalisées
- Configurations MCP
- Fichiers de contexte

Installer des extensions de sécurité
Par exemple, dans ce tutoriel, nous allons voir comment installer les extensions code-review et security.
Exécutez la commande suivante pour installer les extensions security à partir du terminal.
gemini extensions install https://github.com/gemini-cli-extensions/security
Les questions suivantes s'affichent. Appuyez simplement sur Entrée pour accepter.
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.
Installer des extensions d'examen du code
Ensuite, installons l'extension code-review en exécutant la commande ci-dessous.
gemini extensions install https://github.com/gemini-cli-extensions/code-review
Une fois l'opération terminée, exécutez à nouveau la CLI Gemini.
gemini
et exécutez la commande /extensions, vous verrez que ces deux extensions sont déjà installées.

/extensions
Bien, passons maintenant à l'exécution pratique sur l'exemple de dépôt que vous avez cloné précédemment.
6. 🚀 Mode interactif : application d'extension d'analyse de la sécurité du code
L'extension Security est une extension Gemini CLI Open Source conçue pour améliorer la sécurité du dépôt. L'extension ajoute une nouvelle commande à la CLI Gemini qui analyse les modifications de code pour identifier divers risques et failles de sécurité.
Préparons d'abord notre dépôt de démonstration. Exécutez la commande suivante pour passer à la branche où les modifications présentant un risque de sécurité sont déjà appliquées.
git checkout refactor/analysis-demo
Exécutez ensuite la CLI Gemini dans le terminal.
gemini
Exécutons ensuite les extensions.

/security:analyze
Cela lancera un processus de longue durée. Au cours de ce processus, vous recevrez plusieurs interruptions vous demandant l'autorisation d'exécuter des opérations spécifiques telles que mkdir, comme indiqué ci-dessous.

Il s'agit d'un mécanisme de protection visant à s'assurer que les utilisateurs sont conscients de ce qui sera exécuté par Gemini CLI. Pour le reste du tutoriel, vous pouvez toujours l'autoriser ( option 2).
Cette extension appelle un processus de longue durée. Vous pouvez voir qu'elle crée un fichier de planification dans le répertoire .gemini_security et vous pouvez voir la checklist des processus effectués ou non. Comme le montre l'exemple ci-dessous :

L'exécution des tâches prendra un certain temps. En attendant, nous pouvons vérifier la source de ces extensions dans le dépôt GitHub. Cette URL affiche l'invite utilisée pour exécuter tous ces processus d'analyse de sécurité.

Comme vous pouvez le voir, pour effectuer cette analyse, le prompt demande à la Gemini CLI d'effectuer une vérification en deux passes : la passe de reconnaissance et la passe d'investigation plus détaillée.
Si vous rencontrez l'invite suivante dans la Gemini CLI, vous pouvez choisir l'option 2 pour désactiver la détection de boucle.

Demandez ensuite à Gemini CLI de continuer.

continue
Il s'agit d'un mécanisme permettant d'éviter les boucles infinies d'appels d'outils non productifs, qui continuera d'être amélioré au fil du temps.
Une fois terminé, le rapport s'affichera dans le terminal interactif. Pour faciliter la tâche, demandons à la Gemini CLI de l'écrire dans security-analysis.md.

write the result to security-analysis.md file
Vous pouvez maintenant inspecter le résultat écrit dans le fichier.
7. 🚀 Mode non interactif : application d'extension d'examen du code
L'extension code-review ajoute une nouvelle commande à l'interface de ligne de commande Gemini qui analyse les modifications de code pour identifier divers problèmes de qualité du code.
Cette extension peut être exécutée en mode non interactif dans la CLI Gemini, ce qui signifie que l'ensemble du processus peut être exécuté sans avoir à saisir la ligne de commande de la CLI Gemini. Pour exécuter Gemini CLI en mode non interactif, vous pouvez utiliser le modèle de commande suivant :
gemini "put your command here"
Toutefois, il est important de noter que l'exécution en mode non interactif désactivera toute opération d'outil nécessitant l'autorisation de l'utilisateur. Nous devons donc ajouter l'indicateur --yolo pour approuver automatiquement toutes les actions, ce qui signifie activer tous les outils en mode non interactif.
Exécutons l'extension code-review avec la commande suivante :
gemini "/code-review" --yolo -e code-review > code-review.md
Cette commande écrit le résultat de la sortie de la CLI Gemini dans le fichier code-review.md. Notez l'indicateur -e ici. Il contrôle l'extension à activer pendant la session. Ici, nous n'activons que l'extension code-review et désactivons les autres.
Cela prendra un certain temps, mais une fois terminé, vous pourrez voir un résultat semblable à celui indiqué ci-dessous écrit dans le fichier 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. 🚀 Compatibilité avec le protocole MCP
Comme nous l'avons vu précédemment dans les explications sur les extensions, la CLI Gemini peut se connecter aux serveurs MCP, c'est-à-dire aux applications qui fournissent des outils et des ressources via le protocole MCP (Model Context Protocol). Cette connexion permet à la CLI Gemini d'interagir avec des systèmes et des sources de données externes en utilisant des serveurs MCP comme ponts vers votre environnement local et des services externes tels que les API.

Si vous souhaitez configurer votre propre serveur MCP, vous devez modifier votre fichier .gemini/settings.json et ajouter les configurations suivantes :
{
...
# Previous settings above if any
"mcpServers": {
"server_name": {
# MCP server configurations here
}
}
}
Pour ce tutoriel, configurons la connexion à notre compte GitHub afin d'envoyer les données du rapport précédent sur GitHub.
Configurer le serveur MCP GitHub
Commençons par créer le fichier de configuration du projet Gemini CLI. Exécutez la commande suivante :
mkdir -p .gemini && touch .gemini/settings.json
Ouvrez ensuite le fichier .gemini/settings.json et renseignez-le avec la configuration suivante.
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "your-personal-access-token"
},
"timeout": 5000
}
}
}
Vous aurez besoin de votre propre jeton d'accès personnel GitHub. Assurez-vous donc d'avoir déjà un compte GitHub.
Connectez-vous à votre compte GitHub et accédez à Settings (Paramètres).

Faites ensuite défiler la page vers le bas pour trouver Paramètres pour les développeurs et cliquez dessus.

Sélectionnez ensuite Personal access tokens (Jetons d'accès personnels), puis choisissez Tokens (classic) (Jetons (classique)).


Indiquez le nom de votre jeton d'accès personnel ici et cochez les champs d'application repo.

Faites ensuite défiler la page vers le bas et cliquez sur le bouton Generate Token (Générer un jeton). Assurez-vous de
Cliquez sur le bouton Générer un nouveau jeton, puis sélectionnez Générer un nouveau jeton (classique). Copiez ensuite le jeton généré et écrivez-le dans .gemini/settings.json.

Votre fichier .gemini/settings.json devrait donc ressembler à l'exemple suivant :
{
"mcpServers": {
"github": {
"httpUrl": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "ghp-xxxx"
},
"timeout": 5000
}
}
}
Vérifions maintenant la connexion. Saisissez la commande suivante pour accéder à Gemini CLI :
gemini
Exécutez ensuite la commande /mcp. Vous devriez voir que le MCP GitHub est déjà correctement configuré.

/mcp
Testons ensuite cette connexion MCP en envoyant cette commande.

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
Notez la notation @code-review.md et @security-analysis.md ici. C'est ainsi que nous faisons référence aux fichiers à transmettre à la CLI Gemini. Cette commande lira le contenu des deux fichiers et enverra un commentaire à la demande d'extraction associée à cette branche à l'aide de la connexion GitHub MCP. Vous pouvez ensuite vérifier l'URL de la demande d'extraction.

9. 💡 Gemini CLI dans le workflow CI/CD
Si vous utilisez GitHub, vous pouvez facilement intégrer la CLI Gemini à votre pipeline CI/CD en utilisant l'action GitHub run-gemini-cli. Il agit à la fois comme un agent autonome pour les tâches de codage courantes et critiques, et comme un collaborateur à la demande à qui vous pouvez rapidement déléguer du travail.
Vous pouvez l'utiliser pour examiner les demandes d'extraction, trier les problèmes, analyser et modifier le code, et plus encore, en discutant avec Gemini directement dans les dépôts GitHub.
Vous pouvez examiner un exemple de cette intégration dans cette demande d'extraction, où nous utilisons l'extension de sécurité de la CLI Gemini dans le runner et fournissons les avis lorsque la demande d'extraction est créée.




10. 💡 Découvrez d'autres extensions de la CLI Gemini

Vous pouvez également découvrir d'autres extensions sur https://geminicli.com/extensions . Découvrez d'autres outils intéressants !
11. 🧹 Nettoyer
Pour éviter que les ressources utilisées dans cet atelier de programmation soient facturées sur votre compte Google Cloud :
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.