Otomatisasi Peninjauan Kode dengan AI Generatif

1. Ringkasan

Di lab ini, Anda akan menyiapkan pipeline CICD dan berintegrasi dengan Gemini untuk mengotomatiskan langkah-langkah peninjauan kode.

9dde56ad139b9553.png

Yang akan Anda pelajari

Di lab ini, Anda akan mempelajari cara melakukan hal-hal berikut:

  • Cara menambahkan langkah otomatisasi peninjauan kode GenAI di GitHub, GitLab, dan CircleCI
  • Cara menggunakan agen dan toolkit LangChain ReAct untuk mengotomatiskan tugas seperti memberikan komentar pada masalah GitLab dan membuka tiket JIRA

Prasyarat

  • Di lab ini, Anda dianggap telah memahami Konsol Cloud dan lingkungan Cloud Shell.

2. Penyiapan dan persyaratan

Penyiapan Project Cloud

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Penyiapan Lingkungan

Buka chat Gemini.

bc3c899ac8bcf488.png

Atau ketik "Tanya Gemini" di kotak penelusuran.

e1e9ad314691368a.png

Aktifkan Cloud AI Companion API:

66cb6e561e384bbf.png

Klik "Start chatting" dan ikuti salah satu contoh pertanyaan atau ketik perintah Anda sendiri untuk mencobanya.

5482c153eef23126.png

Perintah yang dapat dicoba:

  • Jelaskan Cloud Run dalam 5 poin utama.
  • Anda adalah Product Manager Google Cloud Run, jelaskan Cloud Run kepada seorang siswa dalam 5 poin penting singkat.
  • Anda adalah Product Manager Google Cloud Run, jelaskan Cloud Run kepada Developer Kubernetes Bersertifikat dalam 5 poin penting singkat.
  • Anda adalah Product Manager Google Cloud Run, jelaskan kapan Anda akan menggunakan Cloud Run versus GKE kepada Developer Senior dalam 5 poin penting singkat.

Lihat Panduan Perintah untuk mempelajari lebih lanjut cara menulis perintah yang lebih baik.

Cara Gemini untuk Google Cloud menggunakan data Anda

Komitmen privasi Google

Google adalah salah satu yang pertama di industri yang memublikasikan komitmen privasi AI/ML, yang menguraikan keyakinan kami bahwa pelanggan harus memiliki tingkat keamanan dan kontrol tertinggi atas data mereka yang disimpan di cloud.

Data yang Anda kirimkan dan terima

Pertanyaan yang Anda ajukan kepada Gemini, termasuk informasi input atau kode yang Anda kirimkan ke Gemini untuk dianalisis atau diselesaikan, disebut perintah. Jawaban atau penyelesaian kode yang Anda terima dari Gemini disebut respons. Gemini tidak menggunakan perintah Anda atau responsnya sebagai data untuk melatih modelnya.

Enkripsi perintah

Saat Anda mengirimkan perintah ke Gemini, data Anda dienkripsi selama pengiriman sebagai input ke model pokok di Gemini.

Data program yang dihasilkan dari Gemini

Gemini dilatih dengan kode Google Cloud pihak pertama serta kode pihak ketiga yang dipilih. Anda bertanggung jawab atas keamanan, pengujian, dan efektivitas kode Anda, termasuk penyelesaian, pembuatan, atau analisis kode yang ditawarkan Gemini kepada Anda.

Pelajari lebih lanjut cara Google menangani perintah Anda.

3. Opsi untuk menguji perintah

Jika ingin mengubah/memperluas perintah devai cli yang ada, Anda memiliki beberapa opsi untuk melakukannya.

Vertex AI Studio adalah bagian dari platform Vertex AI Google Cloud, yang dirancang khusus untuk menyederhanakan dan mempercepat pengembangan serta penggunaan model AI generatif.

Google AI Studio adalah alat berbasis web untuk membuat prototipe dan bereksperimen dengan rekayasa perintah dan Gemini API. Daftar ke Gemini 1.5 Pro dengan jendela konteks 1 juta atau pelajari lebih lanjut.

Aplikasi web Google Gemini (gemini.google.com) adalah alat berbasis web yang dirancang untuk membantu Anda menjelajahi dan memanfaatkan kecanggihan model AI Gemini Google.

4. Buat Akun Layanan

Aktifkan Cloud Shell dengan mengklik ikon di sebelah kanan kotak penelusuran.

3e0c761ca41f315e.png

Di terminal yang terbuka, aktifkan layanan yang diperlukan untuk menggunakan Vertex AI API dan chat Gemini.

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

Jika diminta untuk memberikan otorisasi, klik "Authorize" untuk melanjutkan.

6356559df3eccdda.png

Jalankan perintah berikut untuk membuat akun layanan dan kunci baru.

Anda akan menggunakan akun layanan ini untuk melakukan panggilan API ke Vertex AI Gemini API dari pipeline 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. Membuat fork repo GitHub ke repo GitHub pribadi Anda

Buka https://github.com/GoogleCloudPlatform/genai-for-developers/fork dan pilih ID pengguna GitHub Anda sebagai pemilik.

Hapus centang pada opsi untuk hanya menyalin cabang "utama".

Klik "Create fork".

6. Mengaktifkan Alur Kerja GitHub Actions

Buka repo GitHub yang di-fork di browser dan beralih ke tab "Actions" untuk mengaktifkan alur kerja.

1cd04db9b37af7cf.png

7. Menambahkan Secret Repositori

Buat secret repositori di bagian "Settings / Secrets and variables / Actions" di repositori GitHub yang di-fork.

Tambahkan secret Repositori dengan nama "GOOGLE_API_CREDENTIALS".

94cbe2778bef25eb.png

Beralihlah ke jendela/tab Google Cloud Shell dan jalankan perintah di bawah di terminal Cloud Shell.

cat ~/vertex-client-key.json

Salin konten file dan tempel sebagai nilai untuk secret.

915579a97f8f2ced.png

Tambahkan secret PROJECT_ID dengan project ID Qwiklabs Anda sebagai nilai 4fa92833ce615a36.png

8. Menjalankan Alur Kerja GitHub Actions

Buka repositori GitHub Anda di browser dan jalankan alur kerja.

Alur kerja dikonfigurasi untuk berjalan pada push kode atau eksekusi manual.

Pilih "GenAI For Developers" di bagian Semua alur kerja, lalu klik "Run workflow" menggunakan cabang "main".

da11273b4b54f7b6.png

Meninjau hasil:

cf49aa41980aacc5.png

Hasil perintah cakupan pengujian:

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

3b21bd4639524763.png

Hasil perintah peninjauan kode:

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

4876dbc2e0042943.png

Hasil perintah peninjauan performa:

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

98dd2472b2e819bf.png

Hasil perintah peninjauan keamanan:

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

7d180a763db92d56.png

Pemblokir meninjau hasil perintah:

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

726175e874aefcf.png

9. Melakukan cloning repositori

Kembali ke terminal Cloud Shell dan clone repositori.

Buat folder untuk repositori GitHub.

mkdir github
cd github

Ubah YOUR-GITHUB-USERID menjadi userid GitHub Anda sebelum menjalankan perintah.

Tetapkan nama pengguna dan email Git di terminal.

Perbarui nilai sebelum menjalankan perintah.

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 

Ubah folder dan buka file alur kerja di Cloud Shell Editor.

cd genai-for-developers

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

Tunggu hingga file konfigurasi ditampilkan di IDE.

9e81e5a79d421eac.png

10. Mengaktifkan Gemini Code Assist

Klik ikon "Gemini" di pojok kanan bawah 7c891e32c055c0e4.png,

klik "Login to Google Cloud" dan "Select a Google Cloud Project".

f5318f22c91ecaa8.png

6b7203ffdd8485fa.png

fb8d42a6bc8a260f.png

Dari jendela pop-up, pilih project Qwiklabs Anda.

f661047956a6d6f9.png

11. Menjelaskan kode dengan Gemini Code Assist

Klik kanan di mana saja dalam file devai-review.yml dan pilih Gemini Code Assist > Explain ini.

41fb7da002bdf43.png

Penjelasan peninjauan:

7724d52e54918c00.png

12. Menjalankan DEVAI CLI secara lokal

Kembali ke Cloud Shell Editor dan buka Terminal baru.

149218baaf30865f.png

Kembali ke terminal Cloud Shell dan jalankan perintah di bawah untuk menginstal devai secara lokal.

pip3 install devai-cli

CLI telah diinstal, tetapi tidak ada di 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.

Jalankan perintah di bawah untuk memperbarui variabel lingkungan PATH. Ganti dengan nama folder beranda pengguna Anda. Contoh: student_00_478dfeb8df15

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

Jalankan perintah devai cli untuk melakukan peninjauan kode secara lokal. Tinjau output 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

Buka skrip peninjauan dengan menjalankan perintah di bawah:

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

Klik kanan di mana saja dalam file review.py dan pilih Gemini Code Assist > Explain ini.

Tinjau penjelasan.

30e3baf4c272c8ab.png

13. Pengembangan CLI DevAI

Di bagian ini, Anda akan melakukan perubahan pada devai cli.

Untuk memulai, siapkan virtualenv python, instal persyaratan, dan jalankan perintah contoh.

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

Jalankan perintah peninjauan cakupan pengujian untuk memeriksa apakah semuanya berfungsi dengan baik:

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

Tinjau hasil menggunakan pratinjau Markdown di Cloud Shell Editor.

Buat file baru dan tempel respons Gemini.

Kemudian, gunakan Palet Perintah dan pilih "Markdown: Open Preview".

ec6fedf4b6d3fb73.png

9999e7fbb20cf251.png

76858be03d73abd0.png

14. Menjelajahi perintah devai cli

Perintah peninjauan kode

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

Perintah peninjauan performa

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

Perintah peninjauan keamanan

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

Perintah peninjauan cakupan pengujian

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

Perintah peninjauan pemblokir

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

Peninjauan dan ringkasan Gambar/Diagram:

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

4b109a74e1aa3fb6.png

Perintah peninjauan:

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

Output:

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.

Analisis perbedaan gambar:

devai review imgdiff \
  -c ~/github/genai-for-developers/images/devai-api.png \
  -t ~/github/genai-for-developers/images/devai-api-slack.png

Output:

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.

Perintah pembuatan dokumentasi:

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

Output:

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

Tinjau perintah devai cli yang tersedia di Cloud Shell Editor:

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

Atau, tinjau README.md di repositori GitHub.

15. Melacak semua variabel lingkungan dalam file

Mulai file baru untuk melacak semua variabel lingkungan (misalnya, kunci API, token API, dll.) yang akan Anda buat.

Anda akan menggunakannya untuk berbagai sistem beberapa kali saat mengikuti lab, sehingga akan lebih mudah untuk mereferensikannya di satu tempat.

16. Konfigurasi pelacakan LLM LangSmith

Buat akun LangSmith dan buat kunci Service API di bagian Setelan. https://docs.smith.langchain.com/

Tetapkan variabel lingkungan yang diperlukan untuk integrasi LangSmith. Ganti kunci Service API sebelum menjalankan perintah.

export LANGCHAIN_API_KEY=langsmith-service-api-key

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

Untuk menghindari eksposur informasi sensitif di terminal, praktik terbaiknya adalah menggunakan read -s. Ini adalah cara aman untuk menetapkan variabel lingkungan tanpa nilai yang muncul di histori perintah konsol. Setelah menjalankannya, Anda harus menempelkan nilai dan menekan enter.

17. Konfigurasi perintah JIRA

Buat akun JIRA, jika Anda belum memilikinya.

Buat token JIRA API untuk project Anda. https://id.atlassian.com/manage-profile/security/api-tokens

Tetapkan variabel lingkungan ini yang diperlukan untuk integrasi JIRA (ganti nilai sebelum menjalankan perintah).

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

Buka file review.py:

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

Tinjau file 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) 

Temukan dan hapus komentar baris di bawah ini:

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

Impor perintah JIRA di bagian atas file

# from devai.commands.jira import create_jira_issue

Metode untuk membuat masalah JIRA dalam metode code

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

Jalankan ulang perintah peninjauan kode dan periksa output agen:

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

Contoh output:

(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: Fungsi __call__ tidak digunakan lagi di LangChain 0.1.0 dan akan dihapus di 0.2.0. Sebagai gantinya, gunakan invoke. warn_deprecated(

Memasukkan rantai AgentExecutor baru... Pemikiran: Deskripsi diberikan dalam pertanyaan sehingga tidak ada yang perlu dipikirkan Tindakan:

{
  "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."
  }
}

Masalah baru dibuat dengan kunci: CYMEATS-117

Pengamatan: Masalah baru dibuat dengan kunci: CYMEATS-117 Pemikiran:Jawaban Akhir: CYMEATS-117

Rantai selesai.

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 "alamat-email-anda"

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

Ubah direktori dan buka file .gitlab-ci.yml.

cd genai-for-developers

cloudshell edit .gitlab-ci.yml

Jika Anda belum melakukannya sebelumnya, aktifkan Gemini di Cloud Shell Editor.

4a7f4640f66037f.png

Klik kanan di mana saja dalam file .gitlab-ci.yml, lalu pilih "Gemini Code Assist > Explain this".

154838a0100389a9.png

18. Konfigurasi perintah GitLab

Buka GitLab dan buat Token Akses Project di bagian "Settings / Access Tokens" di repositori GitLab yang dibuat pada langkah sebelumnya.

Salin dan simpan nilai Token Akses yang akan digunakan di langkah berikutnya.

Gunakan detail berikut:

  • Nama token: devai-cli-qwiklabs
  • Peran: Maintainer
  • Cakupan: api

1865de233277f11c.png

Tetapkan variabel lingkungan yang diperlukan untuk integrasi GitLab.

Perintah ini mengharuskan Anda memperbarui Token Akses GitLab.

export GITLAB_PERSONAL_ACCESS_TOKEN=gitlab-access-token

Perintah ini mengharuskan Anda memperbarui userid dan nama repositori GitLab.

export GITLAB_REPOSITORY="USERID/REPOSITORY"

Tetapkan variabel lingkungan lainnya:

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

Buka situs GitLab dan buat masalah GitLab baru di project Anda dengan judul "CICD AI Insights".

63a13948f6864074.png

Opsi lainnya adalah menggunakan perintah curl di bawah. Anda memerlukan project ID GitLab - Anda dapat mencarinya di bagian "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

Kembali ke Cloud Shell dan buka file review.py:

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

Temukan dan hapus komentar kode di bawah

Baris untuk mengimpor perintah GitLab

# from devai.commands.gitlab import create_gitlab_issue_comment

Metode untuk memberikan komentar pada masalah GitLab

# create_gitlab_issue_comment(response.text)

19. Pengembangan DevAI CLI

Sejak Anda beralih ke repo/direktori GitLab. Anda harus menjalankan kembali langkah-langkah penyiapan di bawah.

Di terminal, siapkan virtualenv python, instal persyaratan, dan jalankan perintah contoh.

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

Anda dapat mengonfirmasi lokasi CLI - kali ini CLI akan berada di folder GitLab.

 which devai

Jalankan kembali perintah peninjauan kode di terminal:

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

Contoh output - dengan beberapa bagian yang dipersingkat:

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

Buka situs GitLab dan tinjau masalah yang diperbarui.

9da39bf6070d9447.png

Tinjau rekaman aktivitas LLM di LangSmith.

Contoh trace LLM.

f32eed34f3a3b040.png

20. Mengirim perubahan ke repositori GitLab

Kembali ke Editor Google Cloud Shell.

Beralihlah ke tab "Source Control".

Tahapkan, commit, dan kirim perubahan yang Anda buat untuk mengupdate file review.py.

b838a11f362454ce.png

21. Konfigurasi CICD GitLab

Selanjutnya, Anda akan mengaktifkan pipeline CICD GitLab untuk menjalankan peninjauan kode saat perubahan di-push ke repositori.

Buka situs GitLab dan buka bagian "Settings / CICD".

Luaskan bagian Variables, lalu klik "Add variable".

Pastikan untuk menghapus centang semua kotak saat Anda menambahkan variabel. Contoh:

68b3ed732b6a8fe9.png

Menggunakan catatan Anda, tempat Anda menyimpan semua variabel lingkungan, tambahkan variabel lingkungan untuk JIRA, GitLab, dan 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"

Untuk nilai variabel GOOGLE_CLOUD_CREDENTIALS, gunakan kunci akun layanan yang dibuat di bagian di atas.

cat ~/vertex-client-key.json

Tampilan Variabel CI/CD:

2f4594ce72be4834.png

22. Menjalankan pipeline CICD GitLab

Buka "Build / Pipelines" di UI GitLab, lalu klik "Run Pipeline".

a7518e37dde42366.png

23. Meninjau output pipeline GitLab

Buka "Build / Jobs" di UI GitLab dan tinjau output pipeline.

985e4b322fb73b1c.png

Buka situs GitLab dan tinjau komentar yang diperbarui pada masalah "CICD Insights".

Menonaktifkan eksekusi alur kerja GitLab

Kembali ke Editor Google Cloud Shell. Hapus komentar baris untuk menonaktifkan eksekusi alur kerja GitLab pada peristiwa push kode. Anda masih dapat menjalankan alur kerja dari UI sesuai permintaan.

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

Buka .gitlab-ci.yml di root project dan hapus komentar baris:

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

Beralihlah ke tab "Source Control" - tahap, commit, dan kirim perubahan ini.

a9d52beb8c642982.png

24. Integrasi CircleCI

Apa itu CircleCI?

CircleCI adalah platform CI/CD berbasis cloud yang memungkinkan tim mengotomatiskan proses pengembangan dan deployment software mereka. Alat ini terintegrasi dengan sistem kontrol versi seperti GitHub, Bitbucket, dan GitLab, sehingga tim dapat memvalidasi perubahan kode secara real time dengan menjalankan pengujian dan build otomatis. Untuk continuous delivery, CircleCI dapat mengotomatiskan deployment software ke berbagai lingkungan cloud seperti AWS, Google Cloud, dan Azure.

Penyiapan

Buka situs CircleCI dan buat Project baru. Pilih "GitLab" / "Cloud" untuk repo Anda.

Berikan akses CircleCI ke akun GitLab Anda.

Di bagian opsi Tercepat, pilih cabang main. CircleCI mungkin mendeteksi file konfigurasi yang ada dan melewati langkah ini.

4e9b7cef458d5fba.png

Setelah project dibuat, klik bagian "Project Settings" / "Environment Variables".

1499b5f96ac0fe5e.png

Tambahkan semua variabel lingkungan yang telah Anda gunakan sejauh ini.

f15b7a3e02c649e8.png

Berikut adalah contoh daftar variabel lingkungan yang akan ditambahkan.

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. Mengaktifkan metode JIRA dan GitLab

Buka Google Cloud Shell Editor dan buat perubahan pada file review.py.

Temukan dan hapus tanda komentar pada baris di bawah.

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

Beralihlah ke tab "Source Control" - tahap, commit, dan kirim perubahan ini.

Buka situs GitLab, lalu buka "Build" / "Pipelines".

d196ad631be17b88.png

Ikuti link ke CircleCI untuk meninjau alur kerja.

d4ff287694b82445.png

Tinjau komentar tentang masalah GitLab di repositori Anda.

e77ee826488d5299.png

9a51daa2960994e3.png

Tinjau masalah baru yang dibuat di project JIRA Anda.

1e6305a32aaef6a2.png

26. Selamat!

Selamat, Anda telah menyelesaikan lab!

Yang telah kita bahas:

  • Menambahkan langkah-langkah otomatisasi peninjauan kode GenAI di GitHub, GitLab, dan CircleCI.
  • Agen LangChain ReAct untuk mengotomatiskan tugas seperti memberikan komentar pada masalah GitLab dan membuka tiket JIRA.

Langkah berikutnya:

  • Sesi praktik lainnya akan segera hadir.

Pembersihan

Agar tidak dikenai biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

©2024 Google LLC Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.