Bitbucket : automatisation de l'examen du code avec l'IA générative

1. Présentation

Dans cet atelier, vous allez configurer le pipeline Bitbucket et l'intégrer à Gemini pour automatiser les étapes de revue du code.

92eff32c1969388f.png

Objectifs de l'atelier

Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :

  • Ajouter des étapes d'automatisation de la revue de code par IA générative dans Bitbucket
  • Exécuter l'interface de ligne de commande devai en local pour automatiser les revues de code

Prérequis

  • Dans cet atelier, nous considérons que vous connaissez la console Cloud et les environnements Cloud Shell.

2. Préparation

Configuration du projet Cloud

  1. Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. Si vous n'avez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
  • L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet.
  • Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.

Configuration de l'environnement

Ouvrez le chat Gemini.

bc3c899ac8bcf488.png

Vous pouvez également saisir "Demander à Gemini" dans la barre de recherche.

e1e9ad314691368a.png

Activez l'API Gemini for Google Cloud :

990a0ceea7d05531.png

Cliquez sur "Start chatting", puis suivez l'une des questions exemples ou saisissez votre propre requête pour l'essayer.

ed120d672468b412.png

Prompts à tester :

  • Explique Cloud Run en cinq points clés.
  • Vous êtes responsable produit Google Cloud Run. Expliquez Cloud Run à un étudiant en cinq points clés.
  • Vous êtes responsable produit Google Cloud Run. Expliquez Cloud Run à un développeur Kubernetes certifié en cinq points clés.
  • Vous êtes responsable produit Google Cloud Run. Expliquez à un développeur senior quand utiliser Cloud Run plutôt que GKE en cinq points clés.

Consultez le Guide sur la création de requêtes pour découvrir comment rédiger des requêtes plus efficaces.

Utilisation de vos données par Gemini pour Google Cloud

Engagement de Google concernant la confidentialité

Google a été l'un des premiers acteurs du secteur à publier un engagement concernant la confidentialité de l'IA/du ML, affirmant ainsi que ses clients doivent bénéficier du plus haut niveau de sécurité et de contrôle sur leurs données stockées dans le cloud.

Données que vous envoyez et recevez

Les questions que vous posez à Gemini, y compris les informations ou le code que vous lui envoyez pour qu'il les analyse ou les complète, sont appelées requêtes. Les réponses ou les complétions de code que vous recevez de Gemini sont appelées réponses. Gemini n'utilise pas vos requêtes ni ses réponses comme données pour entraîner ses modèles.

Chiffrement des prompts

Lorsque vous envoyez des requêtes à Gemini, vos données sont chiffrées en transit, c'est-à-dire pendant le transfert vers le modèle sous-jacent de Gemini.

Données de programme générées par Gemini

Gemini est entraîné sur du code Google Cloud propriétaire ainsi que sur du code tiers sélectionné. Vous êtes responsable de la sécurité, des tests et de l'efficacité de votre code, y compris pour les éléments générés à l'aide des fonctionnalités de complétion, de génération ou d'analyse de code proposées par Gemini.

En savoir plus sur la façon dont Google traite vos requêtes

3. Options pour tester les requêtes

Si vous souhaitez modifier ou étendre les invites CLI devai existantes, plusieurs options s'offrent à vous.

Vertex AI Studio fait partie de la plate-forme Vertex AI de Google Cloud. Il est spécialement conçu pour simplifier et accélérer le développement et l'utilisation de modèles d'IA générative.

Google AI Studio est un outil Web qui permet de prototyper et de tester le prompt engineering et l'API Gemini.

L'application Web Google Gemini (gemini.google.com) est un outil Web conçu pour vous aider à explorer et à exploiter la puissance des modèles d'IA Gemini de Google.

4. Créer un compte de service

Activez Cloud Shell en cliquant sur l'icône à droite de la barre de recherche.

3e0c761ca41f315e.png

Dans le terminal qui s'ouvre, activez les services requis pour utiliser les API Vertex AI et le chat Gemini.

gcloud services enable \
    aiplatform.googleapis.com \
    cloudaicompanion.googleapis.com \
    cloudresourcemanager.googleapis.com \
    secretmanager.googleapis.com

Si vous êtes invité à donner votre autorisation, cliquez sur "Autoriser" pour continuer.

6356559df3eccdda.png

Exécutez les commandes suivantes pour créer un compte de service et des clés.

Vous utiliserez ce compte de service pour effectuer des appels d'API vers l'API Gemini Vertex AI à partir de pipelines CI/CD.

PROJECT_ID=$(gcloud config get-value project)
SERVICE_ACCOUNT_NAME='vertex-client'
DISPLAY_NAME='Vertex Client'
KEY_FILE_NAME='vertex-client-key'

gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME --display-name "$DISPLAY_NAME"

Attribuez des rôles.

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/aiplatform.admin" --condition None

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" --condition None

gcloud iam service-accounts keys create $KEY_FILE_NAME.json --iam-account=$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com

5. Importer un dépôt GitHub vers un dépôt Bitbucket

Connectez-vous à https://bitbucket.org/ et sélectionnez l'option"Create" / Repository / Import repository.

bf74d0d8c903fd71.png

URL du dépôt Git :

https://github.com/GoogleCloudPlatform/genai-for-developers.git

Sélectionnez votre espace de travail et votre projet, puis donnez un nom au nouveau dépôt.

891c8ac58cc71419.png

Cliquez sur "Import repository" pour lancer le processus d'importation.

6. Ajouter des variables de pipeline Bitbucket

Vous allez ensuite activer le pipeline CICD Bitbucket pour exécuter la revue de code lorsque des modifications sont envoyées au dépôt.

Ouvrez le dépôt Bitbucket dans le navigateur et accédez à la section "Repository settings / PIPELINES / Settings"". Activez les pipelines pour ce dépôt.

8b431c2a83222546.png

Accédez à la section "Repository settings / PIPELINES / Repository variables"".

Ajoutez trois variables :

  • PROJECT_ID : ID de votre projet Qwiklabs
  • LOCATION : us-central1
  • GOOGLE_CLOUD_CREDENTIALS

Pour la valeur de la variable GOOGLE_CLOUD_CREDENTIALS, utilisez la clé de compte de service créée dans la section ci-dessus. Exécutez cette commande dans Google Cloud Shell et copiez/collez la valeur.

cat ~/vertex-client-key.json

Vue des variables du dépôt :

fe2b8e768c09dc5b.png

7. Exécuter un pipeline Bitbucket

Ouvrez la section "Pipelines", puis cliquez sur "Run initial pipeline".

f97424bbfc790da8.png

Sélectionnez la branche "main" et le pipeline "default", puis cliquez sur "Run".

8e7604e2f513360e.png

8. Examiner la sortie du pipeline Bitbucket

Ouvrez/actualisez la section "Pipelines" et examinez la sortie du pipeline.

abf4fbdec6781ffd.png

335acbee3cba263f.png

Résultats de la commande de couverture de test :

devai review testcoverage -c ./sample-app/src

Cette commande devai review testcoverage analyse le code et sa suite de tests associée, le cas échéant, à l'aide d'un modèle d'IA générative, Gemini. Il évalue la couverture de test du code fourni, en identifiant les fichiers et les méthodes avec et sans tests unitaires. La commande utilise ensuite le modèle pour fournir un résumé de la couverture, y compris des métriques telles que les lignes et les branches/conditions couvertes. Sur la base de son analyse, il formule des recommandations pour améliorer la couverture des tests, suggère des tests spécifiques à ajouter et propose des conseils généraux sur les bonnes pratiques de test. Enfin, il génère la réponse du modèle Gemini, qui inclut des détails tels que les fichiers sans couverture et des suggestions pour améliorer les tests existants, et l'affiche à l'utilisateur via la ligne de commande.

Résultats de la commande d'examen du code :

devai review code -c ./sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

La commande devai review code effectue une revue de code complète d'un extrait de code fourni à l'aide d'un modèle d'IA générative. Il prend le code à examiner comme entrée (contexte) et une préférence de format de sortie (sortie). Il s'appuie sur un grand modèle de langage pour analyser le code en termes d'exactitude, d'efficacité, de facilité de maintenance, de sécurité et de respect des bonnes pratiques. La commande construit une requête détaillée indiquant à Gemini comment effectuer l'examen, puis l'envoie au modèle pour qu'il évalue le code fourni. Enfin, il traite la réponse de Gemini, la met en forme en Markdown, JSON ou dans un tableau selon les préférences de l'utilisateur, et affiche les résultats de l'examen.

Résultats de la commande d'examen de la conformité :

devai review compliance --context ./sample-app/k8s --config ./devai-cli/gemini/styleguide.md

La commande devai review compliance analyse le code par rapport à un ensemble de bonnes pratiques, généralement pour les configurations Kubernetes. Il utilise un modèle Gemini pour examiner le code fourni (context) et le comparer aux normes spécifiées dans un fichier de configuration distinct (config). La commande utilise un prompt pour demander au modèle Gemini d'agir en tant qu'ingénieur Kubernetes expert et de fournir un rapport de conformité. Il met ensuite en forme les résultats sous la forme d'une brève explication, en se concentrant sur les exemples de code qui montrent comment résoudre les problèmes identifiés. Enfin, la commande affiche le résultat de l'examen de conformité de Gemini dans la console. Cela permet à un utilisateur d'auditer facilement son code pour vérifier sa conformité.

9. Cloner le dépôt Bitbucket et configurer la clé SSH

Revenez au terminal Google Cloud Shell et configurez une nouvelle clé SSH.

Mettez à jour votre adresse e-mail avant d'exécuter les commandes.

ssh-keygen -t ed25519 -C "your-email-address"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

cat ~/.ssh/id_ed25519.pub

Ajoutez une clé d'accès à votre dépôt Bitbucket.

Ouvrez "Repository settings / SECURITY / Access keys", puis cliquez sur "Ajouter une clé".

Pour la valeur de la clé, copiez et collez le résultat de la dernière commande.

bac102fd433bb388.png

Dans la section "Source", cliquez sur "Clone" et copiez l'URL.

571f4f775bcbd1f7.png

46c163d7e5356c67.png

Revenez au terminal et clonez le dépôt.

cd ~
mkdir bitbucket
cd bitbucket

Remplacez par l'URL de votre projet et de votre dépôt Bitbucket.

git clone git@bitbucket.org:YOUR_PROJECT/genai-for-developers.git

Accédez au répertoire et ouvrez le fichier bitbucket-pipelines.yml. Si vous avez modifié le nom du dépôt lors de l'importation, mettez à jour le nom du dossier avant d'exécuter les commandes suivantes.

cd genai-for-developers

cloudshell edit bitbucket-pipelines.yml

10. Expliquer du code avec Gemini Code Assist

Effectuez un clic droit n'importe où dans le fichier bitbucket-pipelines.yml, puis sélectionnez Gemini Code Assist > Explain.

29ef71c136d173a2.png

Explication de l'examen :

a183a2df0b6cc668.png

11. Développement de la CLI DevAI

Dans cette section, vous allez modifier l'interface de ligne de commande devai.

Pour commencer, configurez python virtualenv, installez les exigences et exécutez la commande d'exemple.

cd ~/bitbucket/genai-for-developers/devai-cli
python3 -m venv venv
. venv/bin/activate
pip3 install -r src/requirements.txt
pip3 install --editable ./src
devai echo

Définissez les variables d'environnement requises.

export PROJECT_ID=$(gcloud config get-value project)
export LOCATION=us-central1

Exécutez la commande d'examen du code pour vérifier que tout fonctionne correctement :

devai review code -c ~/bitbucket/genai-for-developers/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader > code-review.md

cloudshell edit code-review.md

Examinez les résultats à l'aide de l'aperçu Markdown dans l'éditeur Cloud Shell.

Utilisez ensuite la palette de commandes et sélectionnez "Markdown: Open Preview".

9587123b62f12a55.png

9999e7fbb20cf251.png

9a12ba6ee8b3eedd.png

Commande d'examen de la couverture de test

devai review testcoverage -c ~/bitbucket/genai-for-developers/sample-app/src > testcoverage.md

cloudshell edit testcoverage.md

Commande d'examen de conformité

devai review compliance --context ~/bitbucket/genai-for-developers/sample-app/k8s --config ~/genai-for-developers/devai-cli/.gemini/styleguide.md > k8s-review.md

cloudshell edit k8s-review.md

Commande d'examen des performances

devai review performance -c ~/bitbucket/genai-for-developers/sample-app/src/main/java > performance-review.md

cloudshell edit performance-review.md

Commande d'examen de la sécurité

devai review security -c ~/bitbucket/genai-for-developers/sample-app/src/main/java > security-review.md

cloudshell edit security-review.md

Commandes d'examen des bloqueurs

devai review blockers -c ~/bitbucket/genai-for-developers/sample-app/pom.xml
devai review blockers -c ~/bitbucket/genai-for-developers/sample-app/setup.md

Examen et résumé d'images/diagrammes

Diagramme d'entrée[~/bitbucket/genai-for-developers/images/extension-diagram.png]:

4b109a74e1aa3fb6.png

Commande d'examen :

devai review image \
  -f ~/bitbucket/genai-for-developers/images/extension-diagram.png \
  -p "Review and summarize this diagram" > image-review.md

cloudshell edit image-review.md

Résultat :

The diagram outlines a process for conducting local code reviews using a VS Code extension or CLI, leveraging Google Cloud's Vertex AI (Gemini Pro) for generating review prompts. 

**Process Flow:**

1. **Code Style Check:** Developers initiate the process by checking their code for adherence to pre-defined style guidelines.
2. **Prompt Generation:** The VS Code extension/CLI sends the code to Vertex AI (Gemini Pro) on Google Cloud. 
3. **Vertex AI Review:**  Vertex AI analyzes the code and generates relevant review prompts.
4. **Local Review:** The prompts are sent back to the developer's IDE for their consideration.
5. **Optional Actions:** Developers can optionally: 
    - Create new JIRA issues directly from the IDE based on the review prompts.
    - Generate new issues in a GitLab repository.

**Key Components:**

* **VS Code Extension/CLI:** Tools facilitating the interaction with Vertex AI and potential integrations with JIRA and GitLab.
* **Vertex AI (Gemini Pro):**  Google Cloud's generative AI service responsible for understanding the code and generating meaningful review prompts.
* **Google Cloud Secret Manager:** Securely stores API keys and access tokens required to authenticate and interact with Google Cloud services.
* **JIRA/GitLab (Optional):** Issue tracking and project management tools that can be integrated for a streamlined workflow.

**Benefits:**

* **Automated Review Assistance:**  Leveraging AI to generate review prompts saves time and improves the consistency and quality of code reviews. 
* **Local Development:** The process empowers developers to conduct reviews locally within their familiar IDE.
* **Integration Options:** The flexibility to integrate with project management tools like JIRA and GitLab streamlines workflow and issue tracking.

Analyse des différences d'images

devai review imgdiff \
  -c ~/bitbucket/genai-for-developers/images/devai-api.png \
  -t ~/bitbucket/genai-for-developers/images/devai-api-slack.png > image-diff-review.md

cloudshell edit image-diff-review.md

Résultat :

The following UI elements are missing in the "AFTER UPGRADE STATE" image compared to the "BEFORE UPGRADE STATE" image:

1. **Slack:** The entire Slack element, including the icon, "Team channel" label, and the arrow indicating interaction, is absent in the AFTER UPGRADE image. 
2. **Storage Bucket:**  The "Storage Bucket" element with its icon and "PDFs" label is missing in the AFTER UPGRADE image. 
3. **"GenAI Agents" label in Vertex AI block:** The BEFORE UPGRADE image has "Vertex AI Agents" and "GenAI Agent" labels within the Vertex AI block, while the AFTER UPGRADE image only has "Vertex AI."
4. **"Open JIRA Issue" and "Team Project" labels:** In the BEFORE UPGRADE image, these labels are connected to the JIRA block with an arrow. These are missing in the AFTER UPGRADE image.

**Decision Explanation:**

The analysis is based on a direct visual comparison of the two provided images, noting the presence and absence of specific UI elements and their associated labels. The elements listed above are present in the BEFORE UPGRADE image but absent in the AFTER UPGRADE image.

Analyse des fichiers vidéo :

devai review video \
  -f "/tmp/video.mp4" \
  -p "Review user journey video and create unit tests using jest framework"

Commande de génération de la documentation

devai document readme -c ~/bitbucket/genai-for-developers/sample-app/src/main/

Résultat :

# Bank of Anthos - Balance Reader Service

## Description

The Balance Reader service is a component of the Bank of Anthos sample application. It provides a REST endpoint for retrieving the current balance of a user account. This service demonstrates key concepts for building microservices with Spring Boot and deploying them to a Kubernetes cluster.

## Features
...

Passez en revue les commandes CLI devai disponibles dans l'éditeur Cloud Shell :

cloudshell edit ~/bitbucket/genai-for-developers/devai-cli/README.md

Vous pouvez également consulter le fichier README.md dans le dépôt GitHub.

12. Félicitations !

Félicitations, vous avez terminé cet atelier de programmation.

Points abordés

  • Ajouter des étapes d'automatisation de la revue de code par IA générative dans Bitbucket
  • Exécuter l'interface de ligne de commande devai en local

Étapes suivantes :

  • D'autres sessions pratiques seront bientôt disponibles.

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

© 2024 Google LLC. Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms de société et de produit peuvent être des marques des sociétés auxquelles ils sont associés.