Automatisation de la revue de code avec l'IA générative

1. Présentation

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

9dde56ad139b9553.png

Objectifs de l'atelier

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

  • Ajouter des étapes d'automatisation de l'examen du code GenAI dans GitHub, GitLab et CircleCI
  • Utiliser les agents et les kits d'outils LangChain ReAct pour automatiser des tâches telles que commenter un problème GitLab et ouvrir des demandes JIRA

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 Gemini Chat.

bc3c899ac8bcf488.png

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

e1e9ad314691368a.png

Activez l'API Cloud AI Companion:

66cb6e561e384bbf.png

Cliquez sur Start chatting, puis suivez l'une des questions exemples ou saisissez votre propre requête pour tester la fonctionnalité.

5482c153eef23126.png

Requêtes à tester :

  • Expliquez 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 expérimenté en cinq points clés quand utiliser Cloud Run plutôt que GKE.

Consultez le guide des requêtes pour en savoir plus sur la rédaction de requêtes plus efficaces.

Utilisation de vos données par Gemini pour Google Cloud

Engagement de Google en matière de confidentialité

Google a été l'un des premiers sur le marché à proposer un engagement en matière de confidentialité pour l'IA/le ML, ce qui souligne le fait que nos clients devraient disposer 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 suggestions 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 requêtes

Lorsque vous envoyez des requêtes à Gemini, vos données sont chiffrées en transit pour être transmises au 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 et sur du code tiers sélectionné. Vous êtes responsable de la sécurité, des tests et de l'efficacité de votre code, y compris de toute complétion, génération ou analyse de code que Gemini vous propose.

Découvrez comment Google traite vos requêtes.

3. Options pour tester les requêtes

Si vous souhaitez modifier/étendre les requêtes de la ligne de commande devai existantes, plusieurs options s'offrent à vous.

Vertex AI Studio fait partie de la plate-forme Vertex AI de Google Cloud, spécialement conçue 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 permettant de prototyper et de tester l'ingénierie des requêtes et l'API Gemini. Inscrivez-vous à Gemini 1.5 Pro avec une fenêtre de contexte d'un million de jetons ou en savoir plus.

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 située à droite de la barre de recherche.

3e0c761ca41f315e.png

Dans le terminal ouvert, 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 y êtes invité, 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 à l'API Gemini Vertex AI à partir de pipelines CICD.

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"

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. Dupliquer un dépôt GitHub dans votre dépôt GitHub personnel

Accédez à https://github.com/GoogleCloudPlatform/genai-for-developers/fork et sélectionnez votre ID utilisateur GitHub en tant que propriétaire.

Décochez l'option permettant de copier uniquement la branche "main".

Cliquez sur "Create fork".

6. Activer les workflows GitHub Actions

Ouvrez le dépôt GitHub dissocié dans le navigateur et accédez à l'onglet "Actions" pour activer les workflows.

1cd04db9b37af7cf.png

7. Ajouter des secrets de dépôt

Créez un secret de dépôt sous "Settings / Secrets and variables / Actions" dans le dépôt GitHub dupliqué.

Ajout d'un secret de dépôt avec le nom "GOOGLE_API_CREDENTIALS".

94cbe2778bef25eb.png

Basculez sur la fenêtre/l'onglet Google Cloud Shell, puis exécutez la commande ci-dessous dans le terminal Cloud Shell.

cat ~/vertex-client-key.json

Copiez le contenu du fichier et collez-le en tant que valeur du secret.

915579a97f8f2ced.png

Ajoutez un secret PROJECT_ID avec votre ID de projet Qwiklabs comme valeur 4fa92833ce615a36.png

8. Exécuter le workflow GitHub Actions

Accédez à votre dépôt GitHub dans le navigateur et exécutez le workflow.

Le workflow est configuré pour s'exécuter sur un transfert de code ou une exécution manuelle.

Sélectionnez "GenAI For Developers" sous "Tous les workflows", puis cliquez sur "Run workflow" à l'aide de la branche "main".

da11273b4b54f7b6.png

Examinons les résultats:

cf49aa41980aacc5.png

Résultats de la commande de couverture des tests:

devai review testcoverage -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

3b21bd4639524763.png

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

devai review code -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

4876dbc2e0042943.png

Résultats de la commande d'analyse des performances:

devai review performance -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

98dd2472b2e819bf.png

Résultats de la commande d'examen de sécurité:

devai review security -c ${{ github.workspace }}/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

7d180a763db92d56.png

Les bloqueurs examinent les résultats de la commande:

devai review blockers -c ${{ github.workspace }}/sample-app/pom.xml

726175e874aefcf.png

9. Cloner le dépôt

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

Créez un dossier pour le dépôt GitHub.

mkdir github
cd github

Remplacez YOUR-GITHUB-USERID par votre ID utilisateur GitHub avant d'exécuter les commandes.

Définissez le nom d'utilisateur et l'adresse e-mail Git dans le terminal.

Mettez à jour les valeurs avant d'exécuter les commandes.

git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
git clone https://github.com/YOUR-GITHUB-USERID/genai-for-developers.git 

Accédez à un autre dossier et ouvrez le fichier de workflow dans l'éditeur Cloud Shell.

cd genai-for-developers

cloudshell edit .github/workflows/devai-review.yml 

Attendez que le fichier de configuration s'affiche dans l'IDE.

9e81e5a79d421eac.png

10. Activer Gemini Code Assist

Cliquez sur l'icône Gemini en bas à droite 7c891e32c055c0e4.png.

Cliquez sur Login to Google Cloud et Select a Google Cloud Project.

f5318f22c91ecaa8.png

6b7203ffdd8485fa.png

fb8d42a6bc8a260f.png

Dans la fenêtre pop-up, sélectionnez votre projet Qwiklabs.

f661047956a6d6f9.png

11. Expliquer le code avec Gemini Code Assist

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

41fb7da002bdf43.png

Explication de l'avis:

7724d52e54918c00.png

12. Exécuter la CLI DEVAI localement

Revenez à l'éditeur Cloud Shell et ouvrez un nouveau terminal.

149218baaf30865f.png

Revenez au terminal Cloud Shell et exécutez les commandes ci-dessous pour installer devai localement.

pip3 install devai-cli

La CLI a été installée, mais elle ne figure pas dans le PATH.

WARNING: The script devai is installed in '/home/student_00_478dfeb8df15/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

Exécutez la commande ci-dessous pour mettre à jour la variable d'environnement PATH. Remplacez-le par le nom du dossier d'accueil de votre utilisateur. Par exemple : student_00_478dfeb8df15

export PATH=$PATH:/home/YOUR-USER-HOME-FOLDER/.local/bin

Exécutez la commande de la CLI devai pour effectuer une révision du code en local. Examinez la sortie de la CLI.

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

cd ~/github/genai-for-developers

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

Ouvrez le script d'examen en exécutant la commande ci-dessous:

cloudshell edit devai-cli/src/devai/commands/review.py

Effectuez un clic droit n'importe où dans le fichier review.py, puis sélectionnez Gemini Code Assist > Explain.

Consultez l'explication.

30e3baf4c272c8ab.png

13. Développement de la CLI DevAI

Dans cette section, vous allez modifier la CLI devai.

Pour commencer, configurez virtualenv Python, installez les conditions requises et exécutez l'exemple de commande.

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

Exécutez la commande d'examen de la couverture des tests pour vérifier que tout fonctionne correctement:

devai review testcoverage -c ~/github/genai-for-developers/sample-app/src

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

Créez un fichier et collez-y la réponse de Gemini.

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

ec6fedf4b6d3fb73.png

9999e7fbb20cf251.png

76858be03d73abd0.png

14. Explorer les commandes de la CLI devai

Commande de révision du code

devai review code -c ~/github/genai-for-developers/sample-app/src/main/java

Commande d'évaluation des performances

devai review performance -c ~/github/genai-for-developers/sample-app/src/main/java

Commande d'examen de la sécurité

devai review security -c ~/github/genai-for-developers/sample-app/src/main/java

Commande d'examen de la couverture des tests

devai review testcoverage -c ~/github/genai-for-developers/sample-app/src

Commandes d'examen des bloqueurs

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

Examen et résumé de l'image/du diagramme:

Schéma d'entrée[~/github/genai-for-developers/images/extension-diagram.png]:

4b109a74e1aa3fb6.png

Vérifiez la commande:

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

Sortie :

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 ~/github/genai-for-developers/images/devai-api.png \
  -t ~/github/genai-for-developers/images/devai-api-slack.png

Sortie :

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.

Commande de génération de la documentation:

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

Sortie :

# Bank of Anthos - Balance Reader Service

## Table of Contents
- [Description](#description)
- [Features](#features)
- [Technologies Used](#technologies-used)
- [Installation](#installation)
- [Configuration](#configuration)
- [Usage](#usage)
- [Health Checks](#health-checks)
- [Metrics and Tracing](#metrics-and-tracing)
- [Contributing](#contributing)
- [License](#license)

## 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

- Securely retrieves account balances using JWT authentication.
- Leverages a local cache for fast balance retrieval.
- Asynchronously processes transactions from a central ledger.
- Provides health check endpoints for Kubernetes liveness and readiness probes.
- Exposes metrics to Stackdriver for monitoring and observability.
- Supports distributed tracing with Zipkin.

## Technologies Used

- Java
- Spring Boot
- Spring Data JPA
- Hibernate
- Google Cloud SQL (PostgreSQL)
- JWT (JSON Web Token)
- Guava Cache
- Micrometer
- Stackdriver
- Zipkin

## Installation

1. **Prerequisites:**
   - Java 17 or later
   - Maven 3.5 or later
   - Docker (for containerization)
   - Kubernetes cluster (for deployment)
   - Google Cloud account (for Stackdriver and other GCP services)

Consultez les commandes de la CLI devai disponibles dans l'éditeur Cloud Shell:

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

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

15. Suivre toutes les variables d'environnement dans un fichier

Créez un fichier pour suivre toutes les variables d'environnement (clés API, jetons API, etc.) que vous allez créer.

Vous les utiliserez pour différents systèmes à de nombreuses reprises au cours de l'atelier. Il sera donc plus facile de les référencer en un seul endroit.

16. Configuration du traçage LLM LangSmith

Créez un compte LangSmith et générez une clé API de service dans la section "Paramètres". https://docs.smith.langchain.com/

Définissez les variables d'environnement requises pour l'intégration de LangSmith. Remplacez la clé API du service avant d'exécuter les commandes.

export LANGCHAIN_API_KEY=langsmith-service-api-key

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"

Pour éviter de divulguer des informations sensibles dans le terminal, il est recommandé d'utiliser read -s. Il s'agit d'un moyen sécurisé de définir des variables d'environnement sans que leur valeur ne s'affiche dans l'historique des commandes de la console. Après l'avoir exécuté, vous devez coller la valeur et appuyer sur Entrée.

17. Configuration de la commande JIRA

Créez un compte JIRA si vous n'en avez pas.

Créez un jeton d'API JIRA pour votre projet. https://id.atlassian.com/manage-profile/security/api-tokens

Définissez ces variables d'environnement requises pour l'intégration dans JIRA (remplacez les valeurs avant d'exécuter les commandes).

export JIRA_API_TOKEN=your-token-value
export JIRA_USERNAME="email that you used to register with JIRA"
export JIRA_INSTANCE_URL="https://YOUR-PROJECT.atlassian.net"
export JIRA_PROJECT_KEY="JIRA project key"
export JIRA_CLOUD=true

Ouvrez le fichier review.py:

cloudshell edit ~/github/genai-for-developers/devai-cli/src/devai/commands/review.py

Examinez le fichier review.py:

    source=source.format(format_files_as_string(context))

    code_chat_model = GenerativeModel(model_name)
    code_chat = code_chat_model.start_chat()
    code_chat.send_message(qry)
    response = code_chat.send_message(source)
    ...
    else:
        click.echo(response.text) 

Recherchez et annulez la mise en commentaire de la ligne située sous celle-ci:

# Uncomment after configuring JIRA and GitLab env variables - see README.md for details

Commande d'importation JIRA en haut du fichier

# from devai.commands.jira import create_jira_issue

Méthode permettant de créer un problème JIRA dans la méthode code

#create_jira_issue("Code Review Results", response.text)

Exécutez à nouveau la commande d'analyse du code et vérifiez la sortie de l'agent:

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

devai review code -c ~/github/genai-for-developers/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

Exemple de résultat :

(venv) student_00_19a997c157f8@cloudshell:~/genai-for-developers/devai-cli (qwiklabs-gcp-02-71a9948ae110)$ devai review code -c ../sample-app/src/main/java/anthos/samples/bankofanthos/balancereader
/home/student_00_19a997c157f8/genai-for-developers/devai-cli/venv/lib/python3.9/site-packages/langchain_core/_api/deprecation.py:117: LangChainDeprecationWarning: The function `initialize_agent` was deprecated in LangChain 0.1.0 and will be removed in 0.2.0. Use new agent constructor methods like create_react_agent, create_json_agent, create_structured_chat_agent, etc. instead.
  warn_deprecated(
Response from Model: ```java
// Class: TransactionRepository
// Method: findBalance

// Efficiency
- Consider using a native SQL query to improve performance for complex database operations.
- Use prepared statements to avoid SQL injection vulnerabilities.

// Best Practices
- Return a Optional<Long> instead of null to handle the case when no balance is found for the given account.

/home/student_00_19a997c157f8/genai-for-developers/devai-cli/venv/lib/python3.9/site-packages/langchain_core/_api/deprecation.py:117: LangChainDeprecationWarning: La fonction __call__ a été abandonnée dans LangChain 0.1.0 et sera supprimée dans la version 0.2.0. Utilisez plutôt invoke. warn_deprecated(

Saisie de la nouvelle chaîne AgentExecutor… Réflexion: La description est fournie dans la question. Il n'y a donc rien à réfléchir. Action:

{
  "action": "create_issue",
  "action_input": {
    "description": "Class: TransactionRepository\nMethod: findBalance\n\nEfficiency\n- Consider using a native SQL query to improve performance for complex database operations.\n- Use prepared statements to avoid SQL injection vulnerabilities.\n\nBest Practices\n- Return a Optional<Long> instead of null to handle the case when no balance is found for the given account."
  }
}

Nouveau problème créé avec la clé: CYMEATS-117

Observation: Nouveau problème créé avec la clé: CYMEATS-117 Réflexion:Réponse finale: CYMEATS-117

Chaîne terminée.

Open your JIRA project in the browser and review the created issue.

Sample JIRA issue view.

<img src="img/9a93a958c30f0b51.png" alt="9a93a958c30f0b51.png"  width="624.00" />

Open  [LangSmith portal](https://smith.langchain.com/) and review LLM trace for JIRA issue creation call.

Sample LangSmith LLM trace.

<img src="img/6222ee1653a5ea54.png" alt="6222ee1653a5ea54.png"  width="624.00" />


## Import GitHub repo to GitLab repo



Go to  [https://gitlab.com/projects/new](https://gitlab.com/projects/new) and select "`Import project`" / "`Repository by URL`" option:

Git repository url:

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

Or

Your personal GitHub project that you created earlier in this lab.

Under Project URL - select your GitLab userid

Set Visibility to `Public`.

Click - "`Create Project`" to start the import process.

If you see an error about invalid GitHub Repository URL,  [create a new GitHub token](https://github.com/settings/tokens)(fine-grained) with Public repositories read-only access, and retry import again providing your GitHub userid and token.


## Clone GitLab repo and setup SSH key



Return to Google Cloud Shell terminal and set up a new SSH key. 

Update your email before running the commands. Hit enter multiple times to accept defaults.

ssh-keygen -t ed25519 -C "votre adresse e-mail"

eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519

cat ~/.ssh/id_ed25519.pub

Add a public key to your GitLab account.

Open  [https://gitlab.com/-/profile/keys](https://gitlab.com/-/profile/keys) and click "Add new key".

For the key value copy/paste the output of the last command.

Go back to the terminal and clone the repository. 

cd ~ mkdir gitlab cd gitlab

Replace with your GitLab userid and repository url that was just created.

```console
git clone git@gitlab.com:YOUR_GITLAB_USERID/genai-for-developers.git

Accédez au répertoire et ouvrez le fichier .gitlab-ci.yml.

cd genai-for-developers

cloudshell edit .gitlab-ci.yml

Si vous ne l'avez pas déjà fait, activez Gemini dans l'éditeur Cloud Shell.

4a7f4640f66037f.png

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

154838a0100389a9.png

18. Configuration des commandes GitLab

Ouvrez GitLab et créez un jeton d'accès au projet sous "Settings / Access Tokens" dans le dépôt GitLab créé dans les étapes précédentes.

Copiez et stockez la valeur du jeton d'accès à utiliser dans les étapes suivantes.

Utilisez les informations suivantes:

  • Nom du jeton: devai-cli-qwiklabs
  • Rôle : Maintainer
  • Champ d'application: api

1865de233277f11c.png

Définissez les variables d'environnement requises pour l'intégration GitLab.

Pour exécuter cette commande, vous devez mettre à jour votre jeton d'accès GitLab.

export GITLAB_PERSONAL_ACCESS_TOKEN=gitlab-access-token

Cette commande vous oblige à mettre à jour votre ID utilisateur et le nom de votre dépôt GitLab.

export GITLAB_REPOSITORY="USERID/REPOSITORY"

Définissez le reste des variables d'environnement:

export GITLAB_URL="https://gitlab.com"
export GITLAB_BRANCH="devai"
export GITLAB_BASE_BRANCH="main"

Ouvrez le site Web GitLab et créez un problème GitLab dans votre projet avec le titre "CICD AI Insights".

63a13948f6864074.png

Vous pouvez également utiliser la commande curl ci-dessous. Vous aurez besoin d'un ID de projet GitLab. Vous pouvez le rechercher dans la section "Settings / General".

export GITLAB_PROJECT_ID=56390153 # replace

curl --request POST \
  --header "PRIVATE-TOKEN: $GITLAB_PERSONAL_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{"title":"CICD AI Insights"}' \
  https://gitlab.com/api/v4/projects/$GITLAB_PROJECT_ID/issues

Revenez à Cloud Shell et ouvrez le fichier review.py:

cloudshell edit ~/gitlab/genai-for-developers/devai-cli/src/devai/commands/review.py

Recherchez et décommentez le code ci-dessous

Ligne pour importer la commande GitLab

# from devai.commands.gitlab import create_gitlab_issue_comment

Comment ajouter un commentaire à un problème GitLab

# create_gitlab_issue_comment(response.text)

19. Développement de la CLI DevAI

Depuis que vous êtes passé au dépôt/répertoire GitLab. Vous devrez suivre à nouveau les étapes de configuration ci-dessous.

Dans le terminal, configurez votre virtualenv Python, installez les conditions requises et exécutez l'exemple de commande.

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

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

Vous pouvez vérifier l'emplacement de la CLI. Cette fois, elle devrait se trouver dans le dossier GitLab.

 which devai

Exécutez à nouveau la commande d'examen du code dans le terminal:

devai review code -c ~/gitlab/genai-for-developers/sample-app/src/main/java/anthos/samples/bankofanthos/balancereader

Exemple de sortie (certaines sections ont été raccourcies) :

(venv) student_00_19a997c157f8@cloudshell:~/genai-for-developers/devai-cli (qwiklabs-gcp-02-71a9948ae110)$ devai review code -c ../sample-app/src/main/java/anthos/samples/bankofanthos/balancereader
.
.
Response from Model: **Class: Transaction**

**Method: toString**

**Maintainability:**

* The formatting of the string representation could be more clear and concise. Consider using a dedicated method for formatting the amount, e.g., `formatAmount()`.
.
.

> Entering new AgentExecutor chain...
Thought: I need to first get the issue ID using the Get Issues tool, then I can comment on the issue using the Comment on Issue tool.
Action: Get Issues
Action Input: 
Observation: Found 1 issues:
[{'title': 'CICD AI Insights', 'number': 1}]
Thought:Thought: I found the issue ID, so now I can add the comment to the issue.
Action: Comment on Issue
Action Input: 1


Action: Get Issue
Action Input: 1
Observation: {"title": "CICD AI Insights", "body": "", "comments": "[{'body': '**Transaction.java**\\n\\n\\n**Class:** Transaction\\n\\n\\n* **Security:** Consider using a custom date format like \\\\\"yyyy-MM-dd HH:mm:ss.SSS\\\\\" to handle timestamps more robustly.\\n\\n\\n**JWTVerifierGenerator.java**\\n\\n\\n* .
.
Thought:Now I can use the Comment on Issue tool to add the comment to the issue.

Action: Comment on Issue
Action Input: 
1

**Class: Transaction**

**Method: toString**

**Maintainability:**
.
.
.
Observation: Commented on issue 1
Thought:I have now completed the necessary actions and added the comment to the issue 'CICD AI Insights'.

Final Answer: Comment added to issue 'CICD AI Insights'

> Finished chain.

Ouvrez le site Web de GitLab et examinez le problème mis à jour.

9da39bf6070d9447.png

Examinez la trace du LLM dans LangSmith.

Exemple de trace LLM.

f32eed34f3a3b040.png

20. Transférer les modifications vers le dépôt GitLab

Revenez à l'éditeur Google Cloud Shell.

Accédez à l'onglet "Source Control".

Mettez en scène, validez et appliquez les modifications que vous avez apportées pour mettre à jour le fichier review.py.

b838a11f362454ce.png

21. Configuration du CICD GitLab

Vous allez ensuite activer le pipeline CI/CD GitLab pour qu'il exécute l'examen du code lorsque des modifications sont transmises au dépôt.

Ouvrez le site Web GitLab, puis accédez à la section Settings / CICD".

Développez la section Variables, puis cliquez sur Add variable.

Veillez à décocher toutes les cases lorsque vous ajoutez les variables. Exemple :

68b3ed732b6a8fe9.png

À l'aide de vos notes, où vous conservez toutes les variables d'environnement, ajoutez des variables d'environnement pour JIRA, GitLab et LangSmith.

PROJECT_ID=qwiklabs-project-id
LOCATION=us-central1
GOOGLE_CLOUD_CREDENTIALS - cat ~/vertex-client-key.json

LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
LANGCHAIN_API_KEY=your-service-api-key

JIRA_API_TOKEN=your-token
JIRA_USERNAME="email that you used to register with JIRA"
JIRA_INSTANCE_URL="https://YOUR-PROJECT.atlassian.net"
JIRA_PROJECT_KEY="JIRA project key"
JIRA_CLOUD=true

GITLAB_PERSONAL_ACCESS_TOKEN=your-gitlab-token
GITLAB_URL="https://gitlab.com"
GITLAB_REPOSITORY="USERID/REPOSITORY"
GITLAB_BRANCH="devai"
GITLAB_BASE_BRANCH="main"

Pour la valeur de la variable GOOGLE_CLOUD_CREDENTIALS, utilisez la clé de compte de service créée dans la section ci-dessus.

cat ~/vertex-client-key.json

Vue des variables CI/CD:

2f4594ce72be4834.png

22. Exécuter le pipeline GitLab CICD

Ouvrez "Build / Pipelines" dans l'interface utilisateur de GitLab, puis cliquez sur "Run Pipeline".

a7518e37dde42366.png

23. Examiner la sortie du pipeline GitLab

Ouvrez "Build / Jobs" dans l'interface utilisateur de GitLab et examinez la sortie du pipeline.

985e4b322fb73b1c.png

Ouvrez le site Web de GitLab et examinez les commentaires mis à jour sur le problème "CICD Insights".

Désactiver l'exécution du workflow GitLab

Revenez à l'éditeur Google Cloud Shell. Décommentez les lignes pour désactiver l'exécution du workflow GitLab sur les événements de transfert de code. Vous pouvez toujours exécuter le workflow à la demande depuis l'UI.

# workflow:
#   rules:
#     - if: $CI_PIPELINE_SOURCE == "web"

Ouvrez .gitlab-ci.yml dans la racine du projet et annulez la mise en commentaire des lignes suivantes:

cloudshell edit ~/gitlab/genai-for-developers/.gitlab-ci.yml

Accédez à l'onglet "Source Control", effectuez l'étape, le commit et le transfert de cette modification.

a9d52beb8c642982.png

24. Intégration CircleCI

Qu'est-ce que CircleCI ?

CircleCI est une plate-forme CI/CD cloud qui permet aux équipes d'automatiser leurs processus de développement et de déploiement de logiciels. Il s'intègre aux systèmes de contrôle des versions tels que GitHub, Bitbucket et GitLab, ce qui permet aux équipes de valider les modifications de code en temps réel en exécutant des tests et des builds automatisés. Pour la livraison continue, CircleCI peut automatiser le déploiement de logiciels dans divers environnements cloud tels qu'AWS, Google Cloud et Azure.

Configuration

Ouvrez le site Web de CircleCI et créez un projet. Sélectionnez "GitLab" / "Cloud" pour votre dépôt.

Accordez à CircleCI l'accès à votre compte GitLab.

Sous l'option "Le plus rapide", sélectionnez la branche main. CircleCI peut détecter un fichier de configuration existant et ignorer cette étape.

4e9b7cef458d5fba.png

Une fois le projet créé, cliquez sur la section Project Settings/Environment Variables.

1499b5f96ac0fe5e.png

Ajoutez toutes les variables d'environnement que vous avez utilisées jusqu'à présent.

f15b7a3e02c649e8.png

Voici un exemple de liste de variables d'environnement à ajouter.

PROJECT_ID=qwiklabs-project-id
LOCATION=us-central1
GOOGLE_CLOUD_CREDENTIALS - cat ~/vertex-client-key.json

LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
LANGCHAIN_API_KEY=your-service-api-key

JIRA_API_TOKEN=your-token
JIRA_USERNAME="email that you used to register with JIRA"
JIRA_INSTANCE_URL="https://YOUR-PROJECT.atlassian.net"
JIRA_PROJECT_KEY="JIRA project key"
JIRA_CLOUD=true

GITLAB_PERSONAL_ACCESS_TOKEN=your-gitlab-token
GITLAB_URL="https://gitlab.com"
GITLAB_REPOSITORY="USERID/REPOSITORY"
GITLAB_BRANCH="devai"
GITLAB_BASE_BRANCH="main"

25. Activer les méthodes JIRA et GitLab

Ouvrez l'éditeur Google Cloud Shell et modifiez le fichier review.py.

Recherchez et annulez la mise en commentaire des lignes ci-dessous.

# from devai.commands.jira import create_jira_issue
create_jira_issue("Performance Review Results", response.text)
create_gitlab_issue_comment(response.text)
.
.
.
create_jira_issue("Security Review Results", response.text)
create_gitlab_issue_comment(response.text)

Accédez à l'onglet "Source Control", effectuez l'étape, le commit et le transfert de cette modification.

Ouvrez le site Web de GitLab, puis accédez à Build/Pipelines.

d196ad631be17b88.png

Suivez le lien vers CircleCI pour consulter le workflow.

d4ff287694b82445.png

Consultez les commentaires sur le problème GitLab dans votre dépôt.

e77ee826488d5299.png

9a51daa2960994e3.png

Examinez les nouveaux problèmes créés dans votre projet JIRA.

1e6305a32aaef6a2.png

26. Félicitations !

Félicitations, vous avez terminé l'atelier.

Points abordés

  • Ajout d'étapes d'automatisation de l'examen du code GenAI dans GitHub, GitLab et CircleCI.
  • Agents LangChain ReAct pour automatiser des tâches telles que commenter un problème GitLab et ouvrir des demandes JIRA.

É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.