Bitbucket – Code Review Automation with Generative AI

1. Übersicht

In diesem Lab richten Sie die Bitbucket-Pipeline ein und binden sie in Gemini ein, um Code-Review-Schritte zu automatisieren.

92eff32c1969388f.png

Lerninhalte

In diesem Lab lernen Sie Folgendes:

  • Schritte zum Hinzufügen der GenAI-Automatisierung von Code Reviews in Bitbucket
  • devai-CLI lokal ausführen, um Code-Reviews zu automatisieren

Vorbereitung

  • Für dieses Lab wird davon ausgegangen, dass Sie mit der Cloud Console und mit Cloud Shell-Umgebungen vertraut sind.

2. Einrichtung und Anforderungen

Cloud-Projekt einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen Namen versuchen und sehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs kostet wenig oder gar nichts. Wenn Sie Ressourcen herunterfahren möchten, um Kosten zu vermeiden, die über diese Anleitung hinausgehen, können Sie die erstellten Ressourcen oder das Projekt löschen. Neue Google Cloud-Nutzer können am kostenlosen Testzeitraum mit einem Guthaben von 300$ teilnehmen.

Umgebung einrichten

Öffnen Sie den Gemini-Chat.

bc3c899ac8bcf488.png

Oder geben Sie „Gemini fragen“ in die Suchleiste ein.

e1e9ad314691368a.png

Aktivieren Sie die Gemini for Google Cloud API:

990a0ceea7d05531.png

Klicken Sie auf „Start chatting“ und folgen Sie einer der Beispielanfragen oder geben Sie einen eigenen Prompt ein, um die Funktion auszuprobieren.

ed120d672468b412.png

Probiere folgende Prompts aus:

  • Erkläre Cloud Run in fünf wichtigen Punkten.
  • Du bist Google Cloud Run Product Manager und sollst einem Studenten Cloud Run in fünf kurzen Stichpunkten erklären.
  • Du bist Google Cloud Run Product Manager. Erkläre einem zertifizierten Kubernetes-Entwickler Cloud Run in fünf kurzen Stichpunkten.
  • Du bist Google Cloud Run Product Manager. Erkläre einem Senior Developer in fünf kurzen Stichpunkten, wann du Cloud Run und wann GKE verwenden würdest.

Weitere Informationen zum Schreiben besserer Prompts finden Sie im Leitfaden für Prompts.

Verwendung Ihrer Daten durch Gemini for Google Cloud

Datenschutzverpflichtung von Google

Google war einer der ersten Anbieter in der Branche, der eine KI-/ML-Datenschutzverpflichtung veröffentlicht hat. Diese legt fest, dass Kunden die höchste Sicherheit und Kontrolle über ihre Daten haben sollten, die in der Cloud gespeichert werden.

Daten, die Sie senden und empfangen

Die Fragen, die Sie Gemini stellen, einschließlich aller eingegebenen Informationen oder des Codes, den Sie zur Analyse oder Vervollständigung an Gemini senden, werden als Prompts bezeichnet. Die Antworten oder Codevorschläge, die Sie von Gemini erhalten, werden als Antworten bezeichnet. Gemini verwendet Ihre Prompts und seine Antworten nicht als Daten zum Trainieren seiner Modelle.

Verschlüsselung von Prompts

Wenn Sie Prompts an Gemini senden, werden Ihre Daten während der Übertragung verschlüsselt und als Eingabe für das zugrunde liegende Modell in Gemini verwendet.

Von Gemini generierte Programmdaten

Gemini wurde mit eigenem Google Cloud-Code sowie mit ausgewähltem Drittanbieter-Code trainiert. Sie sind für die Sicherheit, das Testen und die Funktionsfähigkeit Ihres Codes verantwortlich, einschließlich aller Vervollständigungen, Generierungen oder Analysen von Code, die Gemini Ihnen bereitstellt.

Weitere Informationen

3. Optionen zum Testen von Prompts

Wenn Sie vorhandene devai-CLI-Prompts ändern oder erweitern möchten, haben Sie dazu mehrere Möglichkeiten.

Vertex AI Studio ist Teil der Vertex AI-Plattform von Google Cloud und wurde speziell entwickelt, um die Entwicklung und Verwendung generativer KI-Modelle zu vereinfachen und zu beschleunigen.

Google AI Studio ist ein webbasiertes Tool zum Erstellen von Prototypen und Experimentieren mit Prompt-Engineering und der Gemini API.

Die Google Gemini Web-App (gemini.google.com) ist ein webbasiertes Tool, mit dem Sie die Leistungsfähigkeit der Gemini-KI-Modelle von Google erkunden und nutzen können.

4. Dienstkonto erstellen

Aktivieren Sie Cloud Shell, indem Sie rechts neben der Suchleiste auf das Symbol klicken.

3e0c761ca41f315e.png

Aktivieren Sie im geöffneten Terminal die erforderlichen Dienste, um Vertex AI APIs und Gemini Chat zu verwenden.

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

Wenn Sie zur Autorisierung aufgefordert werden, klicken Sie auf „Autorisieren“, um fortzufahren.

6356559df3eccdda.png

Führen Sie die folgenden Befehle aus, um ein neues Dienstkonto und neue Schlüssel zu erstellen.

Mit diesem Dienstkonto führen Sie API-Aufrufe an die Vertex AI Gemini API aus CICD-Pipelines aus.

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"

Rollen zuweisen

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. GitHub-Repository in Bitbucket-Repository importieren

Melden Sie sich unter https://bitbucket.org/ an und wählen Sie die Option „Create“ / „Repository / Import repository“ aus.

bf74d0d8c903fd71.png

Git-Repository-URL:

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

Wählen Sie Ihren Arbeitsbereich und Ihr Projekt aus und geben Sie einen Namen für das neue Repository an.

891c8ac58cc71419.png

Klicken Sie auf „Import repository“, um den Importvorgang zu starten.

6. Bitbucket-Pipelinevariablen hinzufügen

Als Nächstes aktivieren Sie die Bitbucket-CICD-Pipeline, damit Code Reviews ausgeführt werden, wenn Änderungen per Push in das Repository übertragen werden.

Öffnen Sie das Bitbucket-Repository im Browser und rufen Sie den Abschnitt „Repository settings / PIPELINES / Settings"“ auf. Aktivieren Sie Pipelines für dieses Repository.

8b431c2a83222546.png

Rufen Sie den Bereich „Repository settings / PIPELINES / Repository variables"“ auf.

Fügen Sie drei Variablen hinzu:

  • PROJECT_ID: Ihre Qwiklabs-Projekt-ID
  • LOCATION – us-central1
  • GOOGLE_CLOUD_CREDENTIALS

Verwenden Sie für den Variablenwert GOOGLE_CLOUD_CREDENTIALS den Dienstkontoschlüssel, der im Abschnitt oben erstellt wurde. Führen Sie diesen Befehl in der Google Cloud Shell aus und kopieren Sie den Wert.

cat ~/vertex-client-key.json

Ansicht der Repository-Variablen:

fe2b8e768c09dc5b.png

7. Bitbucket-Pipeline ausführen

Öffnen Sie den Bereich „Pipelines“ und klicken Sie auf „Run initial pipeline“.

f97424bbfc790da8.png

Wählen Sie den Branch „main“ und die Pipeline „default“ aus und klicken Sie auf „Run“.

8e7604e2f513360e.png

8. Bitbucket-Pipelineausgabe prüfen

Öffnen/aktualisieren Sie den Bereich „Pipelines“ und sehen Sie sich die Pipeline-Ausgabe an.

abf4fbdec6781ffd.png

335acbee3cba263f.png

Ergebnisse des Befehls zur Testabdeckung:

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

Mit diesem devai review testcoverage-Befehl wird Code und die zugehörige Testsuite (falls verfügbar) mit einem generativen KI-Modell, Gemini, analysiert. Es wird die Testabdeckung des bereitgestellten Codes bewertet und Dateien und Methoden mit und ohne Einheitentests werden identifiziert. Der Befehl nutzt dann das Modell, um eine Zusammenfassung der Abdeckung zu erstellen, einschließlich Messwerten wie abgedeckten Zeilen und Verzweigungen/Bedingungen. Auf Grundlage der Analyse werden Empfehlungen zur Verbesserung der Testabdeckung gegeben. Es werden bestimmte Tests vorgeschlagen, die hinzugefügt werden sollten, und allgemeine Ratschläge zu Best Practices für Tests angeboten. Schließlich wird die Antwort des Gemini-Modells ausgegeben, die Details wie Dateien ohne Abdeckung und Vorschläge zur Verbesserung vorhandener Tests über die Befehlszeile enthält.

Ergebnisse des Befehls zur Codeüberprüfung:

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

Mit dem Befehl devai review code wird eine umfassende Codeüberprüfung eines bereitgestellten Code-Snippets mithilfe eines generativen KI-Modells durchgeführt. Als Eingabe (Kontext) wird der zu überprüfende Code und als Ausgabe eine bevorzugte Formatierung verwendet. Dabei wird ein Large Language Model verwendet, um den Code auf Richtigkeit, Effizienz, Wartbarkeit, Sicherheit und Einhaltung von Best Practices zu analysieren. Der Befehl erstellt einen detaillierten Prompt, in dem Gemini angewiesen wird, wie die Überprüfung durchgeführt werden soll, und sendet ihn dann an das Modell, um den bereitgestellten Code zu bewerten. Schließlich wird die Antwort von Gemini verarbeitet und entsprechend den Einstellungen des Nutzers in Markdown, JSON oder einer Tabelle formatiert. Dann werden die Überprüfungsergebnisse ausgegeben.

Ergebnisse des Befehls zur Überprüfung der Compliance:

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

Mit dem Befehl devai review compliance wird Code anhand einer Reihe von Best Practices analysiert, in der Regel für Kubernetes-Konfigurationen. Dabei wird ein Gemini-Modell verwendet, um den bereitgestellten Code (context) zu prüfen und mit den in einer separaten Konfigurationsdatei (config) angegebenen Standards zu vergleichen. Mit dem Befehl wird ein Prompt verwendet, um das Gemini-Modell anzuweisen, als Kubernetes-Experte zu fungieren und einen Compliance-Bericht zu erstellen. Anschließend werden die Ergebnisse als kurze Erklärung formatiert, wobei der Schwerpunkt auf Codebeispielen liegt, die zeigen, wie die erkannten Probleme behoben werden können. Schließlich wird die Ausgabe der Compliance-Überprüfung von Gemini in der Konsole ausgegeben. So können Nutzer ihren Code ganz einfach auf die Einhaltung der Richtlinien prüfen.

9. Bitbucket-Repository klonen und SSH-Schlüssel einrichten

Kehren Sie zum Google Cloud Shell-Terminal zurück und richten Sie einen neuen SSH-Schlüssel ein.

Aktualisieren Sie Ihre E‑Mail-Adresse, bevor Sie die Befehle ausführen.

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

cat ~/.ssh/id_ed25519.pub

Fügen Sie Ihrem Bitbucket-Repository einen Zugriffsschlüssel hinzu.

Öffnen Sie „Repository settings / SECURITY / Access keys“ und klicken Sie auf „Schlüssel hinzufügen“.

Kopieren Sie für den Schlüsselwert die Ausgabe des letzten Befehls und fügen Sie sie ein.

bac102fd433bb388.png

Klicken Sie im Abschnitt „Source“ auf „Clone“ und kopieren Sie die URL.

571f4f775bcbd1f7.png

46c163d7e5356c67.png

Kehren Sie zum Terminal zurück und klonen Sie das Repository.

cd ~
mkdir bitbucket
cd bitbucket

Ersetzen Sie die URL durch die URL Ihres Bitbucket-Projekts und -Repositorys.

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

Wechseln Sie das Verzeichnis und öffnen Sie die Datei bitbucket-pipelines.yml. Wenn Sie den Namen des Repositorys während des Imports geändert haben, aktualisieren Sie den Ordnernamen, bevor Sie die folgenden Befehle ausführen.

cd genai-for-developers

cloudshell edit bitbucket-pipelines.yml

10. Code mit Gemini Code Assist erklären

Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle in der Datei bitbucket-pipelines.yml und wählen Sie Gemini Code Assist > Explain aus.

29ef71c136d173a2.png

Erklärung zur Überprüfung:

a183a2df0b6cc668.png

11. DevAI CLI-Entwicklung

In diesem Abschnitt nehmen Sie Änderungen an der devai-Befehlszeile vor.

Richten Sie zuerst eine virtuelle Python-Umgebung ein, installieren Sie die Anforderungen und führen Sie den Beispielbefehl aus.

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

Legen Sie die erforderlichen Umgebungsvariablen fest.

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

Führen Sie den Befehl für die Codeüberprüfung aus, um zu prüfen, ob alles ordnungsgemäß funktioniert:

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

Ergebnisse mit der Markdown-Vorschau im Cloud Shell-Editor ansehen

Verwenden Sie dann die Befehlspalette und wählen Sie „Markdown: Open Preview“ aus.

9587123b62f12a55.png

9999e7fbb20cf251.png

9a12ba6ee8b3eedd.png

Befehl zur Überprüfung der Testabdeckung

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

cloudshell edit testcoverage.md

Befehl zur Überprüfung der Einhaltung der Richtlinie

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

Befehl für die Leistungsanalyse

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

cloudshell edit performance-review.md

Befehl für Sicherheitsüberprüfung

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

cloudshell edit security-review.md

Befehle zur Überprüfung von Blockern

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

Überprüfung und Zusammenfassung von Bildern/Diagrammen

Eingabediagramm[~/bitbucket/genai-for-developers/images/extension-diagram.png]:

4b109a74e1aa3fb6.png

Befehl zum Überprüfen:

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

Ausgabe:

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 von Bildunterschieden

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

Ausgabe:

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 von Videodateien:

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

Befehl zum Generieren der Dokumentation

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

Ausgabe:

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

Sehen Sie sich die verfügbaren devai-CLI-Befehle im Cloud Shell-Editor an:

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

Oder sehen Sie sich die Datei README.md im GitHub-Repository an.

12. Glückwunsch!

Herzlichen Glückwunsch! Sie haben das Codelab abgeschlossen.

Behandelte Themen:

  • Schritte zur Automatisierung von Code Reviews mit generativer KI in Bitbucket hinzufügen
  • devai-CLI lokal ausführen

Nächste Schritte:

  • Weitere praktische Übungen folgen.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

© 2024 Google LLC. Alle Rechte vorbehalten. Google und das Google-Logo sind Marken von Google LLC. Alle anderen Unternehmens- und Produktnamen können Marken der jeweils mit ihnen verbundenen Unternehmen sein.