Bitbucket - Üretken Yapay Zeka ile Kod İnceleme Otomasyonu

1. Genel Bakış

Bu laboratuvarda, Bitbucket ardışık düzenini ayarlayacak ve kod inceleme adımlarını otomatikleştirmek için Gemini ile entegre edeceksiniz.

92eff32c1969388f.png

Öğrenecekleriniz

Bu laboratuvarda şunları yapmayı öğreneceksiniz:

  • Bitbucket'e üretken yapay zeka kod inceleme otomasyonu adımları ekleme
  • Kod incelemelerini otomatikleştirmek için devai CLI'yı yerel olarak çalıştırma

Ön koşullar

  • Bu laboratuvarda, Cloud Console ve Cloud Shell ortamlarına aşina olduğunuz varsayılır.

2. Kurulum ve Gereksinimler

Cloud projesi kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır.
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Ortam Kurulumu

Gemini ile etkileşimi açın.

bc3c899ac8bcf488.png

Alternatif olarak, arama çubuğuna "Gemini'a Sor" yazın.

e1e9ad314691368a.png

Google Cloud için Gemini API'yi etkinleştirin:

990a0ceea7d05531.png

"Start chatting"yı tıklayın ve denemek için örnek sorulardan birini yanıtlayın veya kendi isteminizi yazın.

ed120d672468b412.png

Deneyebileceğiniz istemler:

  • Cloud Run'ı 5 temel noktada açıklayın.
  • Google Cloud Run Ürün Yöneticisi olarak, Cloud Run'ı bir öğrenciye 5 kısa madde halinde açıklayın.
  • Google Cloud Run Ürün Yöneticisi olarak, Cloud Run'ı 5 kısa madde halinde Certified Kubernetes Developer'a açıkla.
  • Google Cloud Run Ürün Yöneticisi olarak, Cloud Run'ı GKE'ye kıyasla ne zaman kullanacağınızı 5 kısa madde halinde kıdemli bir geliştiriciye açıklayın.

Daha iyi istemler yazma hakkında daha fazla bilgi edinmek için İstem Rehberi'ne göz atın.

Google Cloud için Gemini, verilerinizi nasıl kullanır?

Google'ın gizlilik taahhüdü

Google, sektörde yapay zeka/makine öğrenimi gizlilik taahhüdü yayınlayan ilk şirketlerden biriydi. Bu taahhütte, müşterilerin bulutta depolanan verileri üzerinde en yüksek düzeyde güvenlik ve denetime sahip olması gerektiğine inandığımız belirtilir.

Gönderdiğiniz ve aldığınız veriler

Gemini'a sorduğunuz sorular (Gemini'a analiz etmesi veya tamamlaması için gönderdiğiniz giriş bilgileri ya da kodlar dahil) istem olarak adlandırılır. Gemini'dan aldığınız yanıtlar veya kod tamamlama işlemleri, yanıt olarak adlandırılır. Gemini, istemlerinizi veya yanıtlarını modellerini eğitmek için veri olarak kullanmaz.

İstemlerin şifrelenmesi

Gemini'a istem gönderdiğinizde verileriniz, Gemini'daki temel modele giriş olarak aktarım sırasında şifrelenir.

Gemini'dan oluşturulan program verileri

Gemini, birinci taraf Google Cloud kodu ve seçili üçüncü taraf kodu kullanılarak eğitilmiştir. Gemini'ın sunduğu kod tamamlama, oluşturma veya analiz özellikleri de dahil olmak üzere kodunuzun güvenliği, testi ve etkinliği sizin sorumluluğunuzdadır.

Google'ın istemlerinizi nasıl işlediği hakkında daha fazla bilgi edinin.

3. İstemleri test etme seçenekleri

Mevcut devai cli istemlerini değiştirmek/uzatmak isterseniz birkaç seçeneğiniz vardır.

Vertex AI Studio, Google Cloud'un Vertex AI platformunun bir parçasıdır ve özellikle üretken yapay zeka modellerinin geliştirilmesini ve kullanılmasını basitleştirmek ve hızlandırmak için tasarlanmıştır.

Google AI Studio, istem mühendisliği ve Gemini API ile prototip oluşturma ve deneme yapmaya yönelik web tabanlı bir araçtır.

Google Gemini web uygulaması (gemini.google.com), Google'ın Gemini yapay zeka modellerinin gücünü keşfetmenize ve kullanmanıza yardımcı olmak için tasarlanmış web tabanlı bir araçtır.

4. Hizmet hesabı oluşturma

Arama çubuğunun sağındaki simgeyi tıklayarak Cloud Shell'i etkinleştirin.

3e0c761ca41f315e.png

Açılan terminalde, Vertex AI API'lerini ve Gemini ile etkileşimi kullanmak için gerekli hizmetleri etkinleştirin.

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

Yetkilendirmeniz istenirse devam etmek için "Yetkilendir"i tıklayın.

6356559df3eccdda.png

Yeni bir hizmet hesabı ve anahtarlar oluşturmak için aşağıdaki komutları çalıştırın.

Bu hizmet hesabını, CICD ardışık düzenlerinden Vertex AI Gemini API'ye API çağrıları yapmak için kullanacaksınız.

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"

Rol atama

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 deposunu Bitbucket deposuna aktarma

https://bitbucket.org/ adresine giriş yapın ve "Create" / Repository / Import repository" seçeneğini belirleyin.

bf74d0d8c903fd71.png

Git kod deposu URL'si:

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

Çalışma alanınızı ve projenizi seçin, yeni depo için bir ad girin.

891c8ac58cc71419.png

İçe aktarma işlemini başlatmak için "Import repository" simgesini tıklayın.

6. Bitbucket işlem hattı değişkenleri ekleme

Ardından, değişiklikler depoya aktarıldığında kod incelemesi çalıştırmak için Bitbucket CICD ardışık düzenini etkinleştireceksiniz.

Tarayıcıda Bitbucket deposunu açın ve "Repository settings / PIPELINES / Settings" bölümüne gidin. Bu depo için işlem hatlarını etkinleştirin.

8b431c2a83222546.png

"Repository settings / PIPELINES / Repository variables" bölümüne gidin.

3 değişken ekleyin:

  • PROJECT_ID - qwiklabs proje kimliğiniz
  • LOCATION - us-central1
  • GOOGLE_CLOUD_CREDENTIALS

GOOGLE_CLOUD_CREDENTIALS değişken değeri için yukarıdaki bölümde oluşturulan hizmet hesabı anahtarını kullanın. Bu komutu Google Cloud Shell'de çalıştırın ve değeri kopyalayıp yapıştırın.

cat ~/vertex-client-key.json

Depo değişkenleri görünümü:

fe2b8e768c09dc5b.png

7. Bitbucket ardışık düzenini çalıştırma

"Pipelines" bölümünü açıp "Run initial pipeline"yı tıklayın.

f97424bbfc790da8.png

"main" dalını ve "default" işlem hattını seçip "Run" simgesini tıklayın.

8e7604e2f513360e.png

8. Bitbucket ardışık düzen çıktısını inceleme

"Pipelines" bölümünü açın/yenileyin ve ardışık düzen çıkışını inceleyin.

abf4fbdec6781ffd.png

335acbee3cba263f.png

Test kapsamı komutunun sonuçları:

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

Bu devai review testcoverage komutu, Gemini adlı üretken yapay zeka modelini kullanarak kodu ve varsa ilişkili test paketini analiz eder. Sağlanan kodun test kapsamını değerlendirir, birim testleri olan ve olmayan dosyaları ve yöntemleri tanımlar. Ardından komut, kapsanan satırlar ve dallar/koşullar gibi metrikler de dahil olmak üzere kapsama alanının bir özetini sağlamak için modelden yararlanır. Analizine dayanarak test kapsamını iyileştirmeye yönelik önerilerde bulunur, eklenecek belirli testleri önerir ve testlerle ilgili en iyi uygulamalar hakkında genel tavsiyeler sunar. Son olarak, kapsamı olmayan dosyalar gibi ayrıntıların yanı sıra mevcut testleri iyileştirmeye yönelik önerileri de içeren Gemini modelinin yanıtını komut satırı üzerinden kullanıcıya verir.

Kod inceleme komutunun sonuçları:

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

devai review code komutu, üretken yapay zeka modeli kullanarak sağlanan kod snippet'inin kapsamlı bir kod incelemesini yapar. İncelenecek kodu giriş (bağlam) ve çıkış biçimi tercihini çıkış olarak alır. Doğruluk, verimlilik, sürdürülebilirlik, güvenlik ve en iyi uygulamalara uygunluk açısından kodu analiz etmek için büyük bir dil modelinden yararlanır. Komut, Gemini'a incelemenin nasıl yapılacağını açıklayan ayrıntılı bir istem oluşturur ve ardından sağlanan kodu değerlendirmesi için modele gönderir. Son olarak, Gemini'ın yanıtını işler, kullanıcının tercihine göre Markdown, JSON veya tablo biçiminde düzenler ve inceleme sonuçlarını verir.

Uygunluk inceleme komutunun sonuçları:

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

devai review compliance komutu, kodu genellikle Kubernetes yapılandırmaları için bir dizi en iyi uygulamaya göre analiz eder. Bu komut, sağlanan kodu incelemek (context) ve ayrı bir yapılandırma dosyasında (config) tanımlanan belirtilen standartlarla karşılaştırmak için bir Gemini modelini kullanır. Komut, Gemini modeline uzman bir Kubernetes mühendisi gibi davranmasını ve uygunluk raporu sağlamasını söylemek için bir istemden yararlanır. Ardından, bulguları kısa bir açıklama olarak biçimlendirir ve belirlenen sorunların nasıl giderileceğini gösteren kod örneklerine odaklanır. Son olarak, komut Gemini'ın uygunluk incelemesi çıkışını konsola yazdırır. Bu sayede kullanıcılar, kodlarının uygunluğunu kolayca denetleyebilir.

9. Bitbucket deposunu klonlama ve SSH anahtarını ayarlama

Google Cloud Shell terminaline dönün ve yeni bir SSH anahtarı oluşturun.

Komutları çalıştırmadan önce e-postanızı güncelleyin.

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

cat ~/.ssh/id_ed25519.pub

Bitbucket deponuza erişim anahtarı ekleyin.

"Repository settings / SECURITY / Access keys"yı açın ve "Anahtar ekle"yi tıklayın.

Anahtar için son komutun çıkışını kopyalayıp yapıştırın.

bac102fd433bb388.png

"Source" bölümünde "Clone"yı tıklayın ve URL'yi kopyalayın.

571f4f775bcbd1f7.png

46c163d7e5356c67.png

Terminale dönün ve depoyu klonlayın.

cd ~
mkdir bitbucket
cd bitbucket

Bitbucket projeniz ve deponuzun URL'siyle değiştirin.

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

Dizini değiştirin ve bitbucket-pipelines.yml dosyasını açın. İçe aktarma sırasında depo adını değiştirdiyseniz aşağıdaki komutları çalıştırmadan önce klasör adını güncelleyin.

cd genai-for-developers

cloudshell edit bitbucket-pipelines.yml

10. Gemini Code Assist ile kodu açıklama

bitbucket-pipelines.yml dosyasında herhangi bir yeri sağ tıklayın ve Gemini Code Assist > Explain seçeneğini belirleyin.

29ef71c136d173a2.png

İnceleme açıklaması:

a183a2df0b6cc668.png

11. DevAI CLI Geliştirme

Bu bölümde, devai cli'de değişiklikler yapacaksınız.

Başlamak için Python virtualenv'yi ayarlayın, gereksinimleri yükleyin ve örnek komutu çalıştırın.

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

Gerekli ortam değişkenlerini ayarlayın.

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

Her şeyin düzgün çalıştığını kontrol etmek için kod inceleme komutunu çalıştırın:

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

Cloud Shell Düzenleyici'deki Markdown önizlemesini kullanarak sonuçları inceleyin.

Ardından komut paletini kullanıp "Markdown: Open Preview" seçeneğini belirleyin.

9587123b62f12a55.png

9999e7fbb20cf251.png

9a12ba6ee8b3eedd.png

Test kapsamı inceleme komutu

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

cloudshell edit testcoverage.md

Uygunluk incelemesi komutu

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

Performans inceleme komutu

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

cloudshell edit performance-review.md

Güvenlik inceleme komutu

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

cloudshell edit security-review.md

Engelleyici inceleme komutları

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

Resim/Şema inceleme ve özetleme

Giriş diyagramı[~/bitbucket/genai-for-developers/images/extension-diagram.png]:

4b109a74e1aa3fb6.png

İnceleme komutu:

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

Çıkış:

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.

Resim farkı analizi

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

Çıkış:

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.

Video dosyası analizi:

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

Belge oluşturma komutu

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

Çıkış:

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

Cloud Shell Düzenleyici'de kullanılabilen devai cli komutlarını inceleyin:

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

Alternatif olarak, GitHub deposundaki README.md dosyasını inceleyin.

12. Tebrikler!

Tebrikler, codelab'i tamamladınız.

İşlediğimiz konular:

  • Bitbucket'te üretken yapay zeka kod inceleme otomasyonu adımları ekleme
  • devai CLI'yı yerel olarak çalıştırma

Sıradaki adım:

  • Daha fazla uygulamalı oturum geliyor.

Temizleme

Bu eğitimde kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini önlemek amacıyla kaynakları içeren projeyi silin veya projeyi koruyup tek tek kaynakları silin.

Projeyi silme

Faturalandırılmanın önüne geçmenin en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.

©2024 Google LLC. Tüm hakları saklıdır. Google ve Google logosu, Google LLC şirketinin ticari markalarıdır. Diğer tüm şirket ve ürün adları ilişkili oldukları şirketlerin ticari markaları olabilir.