Bitbucket – automatyzacja sprawdzania kodu za pomocą generatywnej AI

1. Przegląd

W tym module skonfigurujesz potok Bitbucket i zintegrujesz go z Gemini, aby zautomatyzować etapy inspekcji kodu.

92eff32c1969388f.png

Czego się nauczysz

W tym module nauczysz się:

  • Jak dodać w Bitbuckecie etapy automatyzacji inspekcji kodu z użyciem generatywnej AI
  • Jak uruchomić lokalnie interfejs wiersza poleceń devai, aby zautomatyzować sprawdzanie kodu

Wymagania wstępne

  • Zakładamy, że użytkownik zna środowiska konsoli Cloud i Cloud Shell.

2. Konfiguracja i wymagania

Konfigurowanie projektu w Google Cloud

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Zawsze możesz ją zaktualizować.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się tym przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i pozostaje on taki przez cały czas trwania projektu.
  • Warto wiedzieć, że istnieje trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego ćwiczenia nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Konfiguracja środowiska

Otwórz rozmowę z Gemini.

bc3c899ac8bcf488.png

Możesz też wpisać „Zapytaj Gemini” na pasku wyszukiwania.

e1e9ad314691368a.png

Włącz interfejs Gemini for Google Cloud API:

990a0ceea7d05531.png

Kliknij „Start chatting” i wybierz jedno z przykładowych pytań lub wpisz własny prompt, aby wypróbować tę funkcję.

ed120d672468b412.png

Prompty do wypróbowania:

  • Wyjaśnij, czym jest Cloud Run, w 5 najważniejszych punktach.
  • Jesteś menedżerem produktu Google Cloud Run. Wyjaśnij studentowi, czym jest Cloud Run, w 5 krótkich punktach.
  • Jesteś menedżerem produktu Google Cloud Run. Wyjaśnij certyfikowanemu programiście Kubernetes, czym jest Cloud Run, w 5 krótkich punktach.
  • Jesteś menedżerem produktu Google Cloud Run. Wyjaśnij starszemu programiście w 5 krótkich punktach, kiedy warto używać Cloud Run, a kiedy GKE.

Więcej informacji o tworzeniu lepszych promptów znajdziesz w przewodniku po promptach.

Jak Gemini w Google Cloud korzysta z danych użytkowników

Zobowiązanie Google do ochrony prywatności

Google jako jedna z pierwszych firm w branży opublikowała zobowiązanie do ochrony prywatności w systemach AI/ML, w którym podkreślamy, że klienci powinni mieć najwyższy poziom bezpieczeństwa i kontroli nad danymi przechowywanymi w chmurze.

Dane, które przesyłasz i odbierasz

Pytania, które zadajesz Gemini, w tym wszelkie dane wejściowe lub kod, które przesyłasz do Gemini w celu analizy lub uzupełnienia, nazywane są promptami. Odpowiedzi lub uzupełnienia kodu, które otrzymujesz od Gemini, nazywamy odpowiedziami. Gemini nie używa Twoich promptów ani swoich odpowiedzi jako danych do trenowania swoich modeli.

Szyfrowanie promptów

Gdy przesyłasz prompty do Gemini, Twoje dane są szyfrowane podczas przesyłania jako dane wejściowe do modelu bazowego w Gemini.

Dane programu wygenerowane przez Gemini

Gemini jest trenowany na podstawie kodu Google Cloud oraz wybranego kodu innych firm. Ponosisz odpowiedzialność za bezpieczeństwo, testowanie i skuteczność swojego kodu, w tym za uzupełnianie, generowanie i analizowanie kodu oferowane przez Gemini.

Dowiedz się więcej o tym, jak Google przetwarza Twoje prompty.

3. Opcje testowania promptów

Jeśli chcesz zmienić lub rozszerzyć istniejące prompty devai cli, masz kilka możliwości.

Vertex AI Studio to część platformy Vertex AI w Google Cloud, która została zaprojektowana specjalnie z myślą o upraszczaniu i przyspieszaniu tworzenia i używania modeli generatywnej AI.

Google AI Studio to internetowe narzędzie do tworzenia prototypów i eksperymentowania z inżynierią promptów oraz interfejsem Gemini API.

Aplikacja internetowa Google Gemini (gemini.google.com) to narzędzie internetowe, które pomaga odkrywać i wykorzystywać możliwości modeli AI Gemini od Google.

4. Utwórz konto usługi

Aktywuj Cloud Shell, klikając ikonę po prawej stronie paska wyszukiwania.

3e0c761ca41f315e.png

W otwartym terminalu włącz wymagane usługi, aby korzystać z interfejsów Vertex AI API i rozmowy z Gemini.

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

Jeśli pojawi się prośba o autoryzację, kliknij „Autoryzuj”, aby kontynuować.

6356559df3eccdda.png

Aby utworzyć nowe konto usługi i klucze, uruchom te polecenia:

Będziesz używać tego konta usługi do wywoływania interfejsu Vertex AI Gemini API z potoków 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"

Przyznaj role.

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. Importowanie repozytorium GitHub do repozytorium Bitbucket

Zaloguj się na stronie https://bitbucket.org/ i wybierz opcję „Create” / Repository / Import repository”.

bf74d0d8c903fd71.png

Adres URL repozytorium Git:

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

Wybierz obszar roboczy i projekt, a następnie podaj nazwę nowego repozytorium.

891c8ac58cc71419.png

Aby rozpocząć importowanie, kliknij „Import repository”.

6. Dodawanie zmiennych potoku Bitbucket

Następnie włącz potok CICD Bitbucket, aby przeprowadzać weryfikację kodu po przesłaniu zmian do repozytorium.

Otwórz repozytorium Bitbucket w przeglądarce i przejdź do sekcji „Repository settings / PIPELINES / Settings". Włącz potoki dla tego repozytorium.

8b431c2a83222546.png

Przejdź do sekcji „Repository settings / PIPELINES / Repository variables".

Dodaj 3 zmienne:

  • PROJECT_ID – identyfikator projektu Qwiklabs
  • LOCATION - us-central1
  • GOOGLE_CLOUD_CREDENTIALS

W przypadku wartości zmiennej GOOGLE_CLOUD_CREDENTIALS użyj klucza konta usługi utworzonego w sekcji powyżej. Uruchom to polecenie w Google Cloud Shell i skopiuj/wklej wartość.

cat ~/vertex-client-key.json

Widok zmiennych repozytorium:

fe2b8e768c09dc5b.png

7. Uruchamianie potoku Bitbucket

Otwórz sekcję „Pipelines” i kliknij „Run initial pipeline”.

f97424bbfc790da8.png

Wybierz gałąź „main” i potok „default”, a następnie kliknij „Run”.

8e7604e2f513360e.png

8. Sprawdzanie danych wyjściowych potoku Bitbucket

Otwórz lub odśwież sekcję „Pipelines” i sprawdź dane wyjściowe potoku.

abf4fbdec6781ffd.png

335acbee3cba263f.png

Wyniki polecenia dotyczącego zakresu testu:

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

To polecenie devai review testcoverage analizuje kod i powiązany z nim zestaw testów (jeśli jest dostępny) za pomocą modelu generatywnej AI Gemini. Ocenia pokrycie testami podanego kodu, identyfikując pliki i metody z testami jednostkowymi i bez nich. Następnie polecenie wykorzystuje model do podsumowania pokrycia, w tym danych takich jak pokryte wiersze i gałęzie/warunki. Na podstawie analizy podaje rekomendacje dotyczące zwiększenia pokrycia testami, sugerując konkretne testy do dodania i oferując ogólne porady dotyczące sprawdzonych metod testowania. Na koniec zwraca odpowiedź modelu Gemini, która zawiera szczegóły, takie jak pliki bez pokrycia, oraz sugestie dotyczące ulepszenia istniejących testów, które są przekazywane użytkownikowi w wierszu poleceń.

Wyniki polecenia inspekcji kodu:

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

Polecenie devai review code przeprowadza kompleksową inspekcję podanego fragmentu kodu przy użyciu modelu generatywnej AI. Jako dane wejściowe (kontekst) przyjmuje kod do sprawdzenia, a jako dane wyjściowe – preferowany format wyjściowy. Wykorzystuje duży model językowy do analizowania kodu pod kątem poprawności, wydajności, łatwości utrzymania, bezpieczeństwa i zgodności ze sprawdzonymi metodami. Polecenie tworzy szczegółowy prompt z instrukcjami dla Gemini dotyczącymi sposobu przeprowadzenia weryfikacji, a następnie wysyła go do modelu, aby ocenić podany kod. Na koniec przetwarza odpowiedź Gemini, formatując ją w języku Markdown, JSON lub w tabeli zgodnie z preferencjami użytkownika, i wyświetla wyniki weryfikacji.

Wyniki polecenia sprawdzania zgodności:

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

Polecenie devai review compliance analizuje kod pod kątem zestawu sprawdzonych metod, zwykle w przypadku konfiguracji Kubernetes. Wykorzystuje model Gemini do sprawdzania podanego kodu (context) i porównywania go z określonymi standardami zdefiniowanymi w osobnym pliku konfiguracyjnym (config). Polecenie wykorzystuje prompt, aby poinstruować model Gemini, aby działał jako doświadczony inżynier Kubernetes i przedstawił raport zgodności. Następnie formatuje wyniki w postaci krótkiego wyjaśnienia, koncentrując się na przykładach kodu, które pokazują, jak rozwiązać wykryte problemy. Na koniec polecenie wyświetla w konsoli wyniki weryfikacji zgodności Gemini. Umożliwia to użytkownikowi łatwe sprawdzenie zgodności kodu z zasadami.

9. Klonowanie repozytorium Bitbucket i konfigurowanie klucza SSH

Wróć do terminala Google Cloud Shell i skonfiguruj nowy klucz SSH.

Zaktualizuj adres e-mail przed uruchomieniem poleceń.

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

cat ~/.ssh/id_ed25519.pub

Dodaj klucz dostępu do repozytorium Bitbucket.

Otwórz „Repository settings / SECURITY / Access keys” i kliknij „Dodaj klucz”.

W przypadku wartości klucza skopiuj i wklej wynik ostatniego polecenia.

bac102fd433bb388.png

W sekcji „Source” kliknij „Clone” i skopiuj adres URL.

571f4f775bcbd1f7.png

46c163d7e5356c67.png

Wróć do terminala i sklonuj repozytorium.

cd ~
mkdir bitbucket
cd bitbucket

Zastąp go adresem URL projektu i repozytorium Bitbucket.

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

Zmień katalog i otwórz plik bitbucket-pipelines.yml. Jeśli podczas importowania zmienisz nazwę repozytorium, przed uruchomieniem poniższych poleceń zaktualizuj nazwę folderu.

cd genai-for-developers

cloudshell edit bitbucket-pipelines.yml

10. Wyjaśnianie kodu za pomocą Gemini Code Assist

Kliknij prawym przyciskiem myszy dowolne miejsce w pliku bitbucket-pipelines.yml i wybierz Gemini Code Assist > Explain.

29ef71c136d173a2.png

Wyjaśnienie weryfikacji:

a183a2df0b6cc668.png

11. Tworzenie interfejsu wiersza poleceń DevAI

W tej sekcji wprowadzisz zmiany w interfejsie devai cli.

Na początek skonfiguruj wirtualne środowisko Pythona, zainstaluj wymagania i uruchom przykładowe polecenie.

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

Ustaw wymagane zmienne środowiskowe.

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

Uruchom polecenie weryfikacji kodu, aby upewnić się, że wszystko działa prawidłowo:

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

Sprawdź wyniki za pomocą podglądu Markdown w edytorze Cloud Shell.

Następnie użyj palety poleceń i wybierz „Markdown: Open Preview”.

9587123b62f12a55.png

9999e7fbb20cf251.png

9a12ba6ee8b3eedd.png

Polecenie sprawdzania pokrycia testowego

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

cloudshell edit testcoverage.md

Polecenie weryfikacji zgodności z zasadami

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

Polecenie sprawdzania wyników

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

cloudshell edit performance-review.md

Polecenie sprawdzania zabezpieczeń

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

cloudshell edit security-review.md

Polecenia dotyczące sprawdzania blokujących

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

Sprawdzanie i podsumowywanie obrazów lub diagramów

Diagram wejściowy[~/bitbucket/genai-for-developers/images/extension-diagram.png]:

4b109a74e1aa3fb6.png

Sprawdź polecenie:

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

Dane wyjściowe:

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.

Analiza różnic między obrazami

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

Dane wyjściowe:

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.

Analiza pliku wideo:

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

Polecenie generowania dokumentacji

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

Dane wyjściowe:

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

Sprawdź dostępne polecenia devai cli w edytorze Cloud Shell:

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

Możesz też zapoznać się z plikiem README.md w repozytorium GitHub.

12. Gratulacje!

Gratulacje! Codelab został ukończony.

Omówione zagadnienia:

  • Dodawanie kroków automatyzacji inspekcji kodu z użyciem generatywnej AI w Bitbucket
  • Uruchamianie interfejsu devai w środowisku lokalnym

Co dalej?

  • Wkrótce pojawią się kolejne sesje praktyczne.

Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, możesz usunąć projekt zawierający te zasoby lub zachować projekt i usunąć poszczególne zasoby.

Usuwanie projektu

Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego w tym samouczku.

©2024 Google LLC. Wszelkie prawa zastrzeżone. Google i logo Google są znakami towarowymi Google LLC. Wszelkie inne nazwy firm i produktów mogą być znakami towarowymi odpowiednich podmiotów, z którymi są powiązane.