Automatyzacja weryfikacji kodu za pomocą GenAI

1. Przegląd

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

9dde56ad139b9553.png

Czego się nauczysz

W tym module nauczysz się:

  • Dodawanie kroków automatyzacji inspekcji kodu GenAI w GitHubie, GitLabie i CircleCI
  • Jak używać agentów i zestawów narzędzi LangChain ReAct do automatyzowania zadań, takich jak komentowanie zgłoszeń w GitLabie i otwieranie zgłoszeń w JIRA

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ę nim 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 też 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 laboratorium 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 programu bezpłatnego okresu próbnego o wartoś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 Cloud AI Companion API:

66cb6e561e384bbf.png

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

5482c153eef23126.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śla, że klienci powinni mieć najwyższy poziom bezpieczeństwa i kontroli nad danymi przechowywanymi w chmurze.

Dane, które przesyłasz i otrzymujesz

Pytania, które zadajesz Gemini, w tym wszelkie informacje 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. Zarejestruj się, aby uzyskać dostęp do Gemini 1.5 Pro z oknem kontekstu o milionie tokenów, lub dowiedz się więcej.

Aplikacja internetowa 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"

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. Tworzenie rozwidlenia repozytorium GitHub na osobistym koncie GitHub

Otwórz https://github.com/GoogleCloudPlatform/genai-for-developers/fork i wybierz swoją nazwę użytkownika GitHub jako właściciela.

Odznacz opcję kopiowania tylko gałęzi „głównej”.

Kliknij „Create fork”.

6. Włączanie procesów działań na GitHubie

Otwórz rozwidlone repozytorium GitHub w przeglądarce i przełącz się na kartę „Actions”, aby włączyć przepływy pracy.

1cd04db9b37af7cf.png

7. Dodawanie wpisów tajnych repozytorium

Utwórz tajny klucz repozytorium w sekcji „Settings / Secrets and variables / Actions” w rozwidlonym repozytorium GitHub.

Dodaj tajny klucz repozytorium o nazwie „GOOGLE_API_CREDENTIALS”.

94cbe2778bef25eb.png

Przejdź do okna lub karty Google Cloud Shell i uruchom w terminalu Cloud Shell to polecenie:

cat ~/vertex-client-key.json

Skopiuj zawartość pliku i wklej ją jako wartość obiektu tajnego.

915579a97f8f2ced.png

Dodaj PROJECT_ID obiekt tajny z identyfikatorem projektu Qwiklabs jako wartością 4fa92833ce615a36.png.

8. Uruchamianie przepływu pracy Działań GitHub

Otwórz repozytorium GitHub w przeglądarce i uruchom przepływ pracy.

Przepływ pracy jest skonfigurowany tak, aby uruchamiać się po przesłaniu kodu lub ręcznie.

W sekcji Wszystkie przepływy pracy wybierz „GenAI For Developers” i kliknij „Run workflow” w gałęzi „main”.

da11273b4b54f7b6.png

Sprawdź wyniki:

cf49aa41980aacc5.png

Wyniki polecenia dotyczącego zakresu testu:

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

3b21bd4639524763.png

Wyniki polecenia weryfikacji kodu:

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

4876dbc2e0042943.png

Wyniki polecenia sprawdzania skuteczności:

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

98dd2472b2e819bf.png

Wyniki polecenia sprawdzania zabezpieczeń:

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

7d180a763db92d56.png

Wyniki polecenia sprawdzania blokad:

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

726175e874aefcf.png

9. Klonowanie repozytorium

Wróć do terminala Cloud Shell i sklonuj repozytorium.

Utwórz folder dla repozytorium GitHub.

mkdir github
cd github

Przed uruchomieniem poleceń zmień YOUR-GITHUB-USERID na swój identyfikator użytkownika GitHub.

Ustaw nazwę użytkownika i adres e-mail Git w terminalu.

Zaktualizuj wartości przed uruchomieniem poleceń.

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 

Zmień folder i otwórz plik przepływu pracy w edytorze Cloud Shell.

cd genai-for-developers

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

Poczekaj, aż plik konfiguracyjny pojawi się w IDE.

9e81e5a79d421eac.png

10. Włącz Gemini Code Assist

W prawym dolnym rogu kliknij ikonę „Gemini” 7c891e32c055c0e4.png.

kliknij „Login to Google Cloud” i „Select a Google Cloud Project”.

f5318f22c91ecaa8.png

6b7203ffdd8485fa.png

fb8d42a6bc8a260f.png

W wyskakującym okienku wybierz projekt Qwiklabs.

f661047956a6d6f9.png

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

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

41fb7da002bdf43.png

Wyjaśnienie weryfikacji:

7724d52e54918c00.png

12. Lokalne uruchamianie interfejsu DEVAI CLI

Wróć do edytora Cloud Shell i otwórz nowy terminal.

149218baaf30865f.png

Wróć do terminala Cloud Shell i uruchom poniższe polecenia, aby zainstalować devai lokalnie.

pip3 install devai-cli

Interfejs CLI został zainstalowany, ale nie znajduje się w ścieżce 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.

Aby zaktualizować zmienną środowiskową PATH, uruchom to polecenie: Zastąp nazwą folderu domowego użytkownika. Na przykład: student_00_478dfeb8df15

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

Uruchom polecenie devai, aby przeprowadzić lokalną weryfikację kodu. Sprawdź dane wyjściowe interfejsu 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

Otwórz skrypt weryfikacji, uruchamiając to polecenie:

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

Kliknij prawym przyciskiem myszy dowolne miejsce w pliku review.py i wybierz Gemini Code Assist > Explain.

Sprawdź wyjaśnienie.

30e3baf4c272c8ab.png

13. 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 ~/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

Uruchom polecenie sprawdzania pokrycia testami, aby upewnić się, że wszystko działa prawidłowo:

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

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

Utwórz nowy plik i wklej odpowiedź Gemini.

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

ec6fedf4b6d3fb73.png

9999e7fbb20cf251.png

76858be03d73abd0.png

14. Poznaj polecenia interfejsu devai cli

Polecenie weryfikacji kodu

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

Polecenie sprawdzania wyników

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

Polecenie sprawdzania zabezpieczeń

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

Polecenie sprawdzania pokrycia testowego

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

Polecenia dotyczące sprawdzania blokujących

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

Sprawdzanie i podsumowywanie obrazów lub diagramów:

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

4b109a74e1aa3fb6.png

Sprawdź polecenie:

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

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

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.

Polecenie generowania dokumentacji:

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

Dane wyjściowe:

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

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

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

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

15. Śledzenie wszystkich zmiennych środowiskowych w pliku

Utwórz nowy plik, aby śledzić wszystkie zmienne środowiskowe (np. klucze interfejsu API, tokeny interfejsu API itp.), które będziesz tworzyć.

Będziesz ich używać w różnych systemach wiele razy w trakcie tego modułu, więc łatwiej będzie odwoływać się do nich w jednym miejscu.

16. Konfiguracja śledzenia LLM w LangSmith

Utwórz konto LangSmith i wygeneruj klucz interfejsu API usługi w sekcji Ustawienia. https://docs.smith.langchain.com/

Ustaw zmienne środowiskowe wymagane do integracji z LangSmith. Przed uruchomieniem poleceń zastąp klucz interfejsu API usługi.

export LANGCHAIN_API_KEY=langsmith-service-api-key

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

Aby uniknąć ujawnienia informacji poufnych w terminalu, najlepiej użyć read -s. Jest to bezpieczny sposób ustawiania zmiennych środowiskowych bez wyświetlania wartości w historii poleceń konsoli. Po uruchomieniu musisz wkleić wartość i nacisnąć Enter.

17. Konfiguracja poleceń JIRA

Utwórz konto JIRA, jeśli jeszcze go nie masz.

Utwórz token API JIRA dla swojego projektu. https://id.atlassian.com/manage-profile/security/api-tokens

Ustaw te zmienne środowiskowe wymagane do integracji z JIRA (zastąp wartości przed uruchomieniem poleceń).

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

Otwórz plik review.py:

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

Sprawdź plik 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) 

Znajdź i usuń znacznik komentarza w wierszu poniżej:

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

Polecenie importowania JIRA u góry pliku

# from devai.commands.jira import create_jira_issue

Metoda tworzenia zgłoszenia problemu w Jira w metodzie code

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

Ponownie uruchom polecenie weryfikacji kodu i sprawdź dane wyjściowe agenta:

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

Przykładowe dane wyjściowe:

(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: Funkcja __call__ została wycofana w LangChain w wersji 0.1.0 i zostanie usunięta w wersji 0.2.0. Zamiast tego użyj funkcji invoke. warn_deprecated(

Wchodzę w nowy łańcuch AgentExecutor... Thought: The description is provided in the question so there is nothing to think about 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."
  }
}

Utworzono nowy problem z kluczem: CYMEATS-117

Obserwacja: utworzono nowy problem z kluczem: CYMEATS-117. Myśl:Odpowiedź: CYMEATS-117

Zakończony łańcuch.

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 "your-email-address"

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

Zmień katalog i otwórz plik .gitlab-ci.yml.

cd genai-for-developers

cloudshell edit .gitlab-ci.yml

Jeśli nie zostało to jeszcze zrobione, włącz Gemini w edytorze Cloud Shell.

4a7f4640f66037f.png

Kliknij prawym przyciskiem myszy dowolne miejsce w pliku .gitlab-ci.yml i wybierz „Gemini Code Assist > Explain this".

154838a0100389a9.png

18. Konfiguracja poleceń GitLab

Otwórz GitLab i utwórz token dostępu do projektu w sekcji „Settings / Access Tokens” w repozytorium GitLab utworzonym w poprzednich krokach.

Skopiuj i zapisz wartość tokena dostępu, aby użyć jej w następnych krokach.

Podaj te informacje:

  • Nazwa tokena: devai-cli-qwiklabs
  • Rola: Maintainer
  • Zakres: api

1865de233277f11c.png

Ustaw zmienne środowiskowe wymagane do integracji z GitLab.

To polecenie wymaga zaktualizowania tokena dostępu do GitLab.

export GITLAB_PERSONAL_ACCESS_TOKEN=gitlab-access-token

To polecenie wymaga zaktualizowania identyfikatora użytkownika GitLab i nazwy repozytorium.

export GITLAB_REPOSITORY="USERID/REPOSITORY"

Ustaw pozostałe zmienne środowiskowe:

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

Otwórz stronę GitLab i utwórz w swoim projekcie nowy problem GitLab o nazwie „CICD AI Insights”.

63a13948f6864074.png

Możesz też użyć tego polecenia curl. Będziesz potrzebować identyfikatora projektu GitLab. Możesz go znaleźć w sekcji „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

Wróć do Cloud Shell i otwórz plik review.py:

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

Znajdź i usuń komentarz z kodu poniżej.

Wiersz do importowania polecenia GitLab

# from devai.commands.gitlab import create_gitlab_issue_comment

Metoda komentowania problemu w GitLab

# create_gitlab_issue_comment(response.text)

19. Tworzenie interfejsu wiersza poleceń DevAI

Po przełączeniu się na repozytorium lub katalog GitLab. Konieczne będzie ponowne wykonanie czynności opisanych poniżej.

W terminalu skonfiguruj wirtualne środowisko Pythona, zainstaluj wymagania i uruchom przykładowe polecenie.

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

Możesz potwierdzić lokalizację interfejsu CLI – tym razem powinien znajdować się w folderze GitLab.

 which devai

Ponownie uruchom polecenie weryfikacji kodu w terminalu:

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

Przykładowe dane wyjściowe – z niektórymi skróconymi sekcjami:

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

Otwórz witrynę GitLab i sprawdź zaktualizowany problem.

9da39bf6070d9447.png

Sprawdź ślad LLM w LangSmith.

Przykładowy ślad LLM.

f32eed34f3a3b040.png

20. Wypychanie zmian do repozytorium GitLab

Wróć do edytora Google Cloud Shell.

Otwórz kartę „Source Control”.

Przygotuj, zatwierdź i wypchnij zmiany, aby zaktualizować plik review.py.

b838a11f362454ce.png

21. Konfiguracja GitLab CICD

Następnie włączysz potok GitLab CICD, aby uruchamiać weryfikację kodu, gdy zmiany są przesyłane do repozytorium.

Otwórz witrynę GitLab i przejdź do sekcji „Settings / CICD"”.

Rozwiń sekcję Variables i kliknij „Add variable”.

Podczas dodawania zmiennych odznacz wszystkie pola wyboru. Przykład:

68b3ed732b6a8fe9.png

Korzystając z notatek, w których przechowujesz wszystkie zmienne środowiskowe, dodaj zmienne środowiskowe dla JIRA, GitLab i 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"

W przypadku wartości zmiennej GOOGLE_CLOUD_CREDENTIALS użyj klucza konta usługi utworzonego w sekcji powyżej.

cat ~/vertex-client-key.json

Widok zmiennych CI/CD:

2f4594ce72be4834.png

22. Uruchamianie potoku GitLab CICD

Otwórz „Build / Pipelines” w interfejsie GitLab i kliknij „Run Pipeline”.

a7518e37dde42366.png

23. Sprawdzanie danych wyjściowych potoku GitLab

Otwórz „Build / Jobs” w interfejsie GitLab i sprawdź dane wyjściowe potoku.

985e4b322fb73b1c.png

Otwórz witrynę GitLab i sprawdź zaktualizowane komentarze do zgłoszenia „CICD Insights”.

Wyłączanie wykonywania procesów GitLab

Wróć do edytora Google Cloud Shell. Usuń znaczniki komentarza z wierszy, aby wyłączyć wykonywanie przepływu pracy GitLab w przypadku zdarzeń wypychania kodu. Możesz nadal wykonywać przepływ pracy na żądanie w interfejsie.

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

Otwórz plik .gitlab-ci.yml w katalogu głównym projektu i usuń znaczniki komentarza z tych wierszy:

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

Przełącz się na kartę „Source Control” – zatwierdź i wypchnij tę zmianę.

a9d52beb8c642982.png

24. Integracja z CircleCI

Co to jest CircleCI?

CircleCI to platforma CI/CD działająca w chmurze, która umożliwia zespołom automatyzację procesów tworzenia i wdrażania oprogramowania. Integruje się z systemami kontroli wersji, takimi jak GitHub, Bitbucket i GitLab, dzięki czemu zespoły mogą weryfikować zmiany w kodzie w czasie rzeczywistym, przeprowadzając automatyczne testy i kompilacje. W przypadku ciągłego dostarczania CircleCI może automatyzować wdrażanie oprogramowania w różnych środowiskach chmurowych, takich jak AWS, Google Cloud i Azure.

Konfiguracja

Otwórz stronę CircleCI i utwórz nowy projekt. Wybierz „GitLab” lub „Cloud” w przypadku repozytorium.

Przyznaj CircleCI dostęp do swojego konta GitLab.

W sekcji Najszybsza opcja wybierz gałąź main. CircleCI może wykryć istniejący plik konfiguracyjny i pominąć ten krok.

4e9b7cef458d5fba.png

Po utworzeniu projektu kliknij sekcję „Project Settings” / „Environment Variables”.

1499b5f96ac0fe5e.png

Dodaj wszystkie zmienne środowiskowe, których używasz do tej pory.

f15b7a3e02c649e8.png

Oto przykładowa lista zmiennych środowiskowych do dodania.

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. Włączanie metod JIRA i GitLab

Otwórz edytor Google Cloud Shell i wprowadź zmianę w pliku review.py.

Znajdź i usuń znaczniki komentarza z wierszy poniżej.

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

Przełącz się na kartę „Source Control” – zatwierdź i wypchnij tę zmianę.

Otwórz stronę GitLab i kliknij „Build” / „Pipelines”.

d196ad631be17b88.png

Kliknij link do CircleCI, aby sprawdzić przepływ pracy.

d4ff287694b82445.png

Przejrzyj komentarze do zgłoszenia GitLab w repozytorium.

e77ee826488d5299.png

9a51daa2960994e3.png

Sprawdź nowe problemy utworzone w projekcie Jira.

1e6305a32aaef6a2.png

26. Gratulacje!

Gratulacje! Moduł został ukończony.

Omówione zagadnienia:

  • Dodawanie kroków automatyzacji inspekcji kodu opartej na generatywnej AI w GitHubie, GitLabie i CircleCI.
  • Agenci LangChain ReAct do automatyzowania zadań takich jak komentowanie zgłoszeń w GitLabie i otwieranie zgłoszeń w JIRA.

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.