1. Ringkasan
Selamat datang di ‘Hari Kedua'. Meskipun membangun aplikasi dan menekan 'Publikasikan' terasa seperti keajaiban, traffic dunia nyata dapat menyebabkan kegagalan di dunia nyata. Daripada menghabiskan waktu berurusan dengan YAML atau mencari-cari log, Anda dapat membangun sekelompok agen khusus untuk mengelola infrastruktur operasional Anda. Codelab ini menunjukkan cara stack terpadu Google Cloud (Eventarc, Cloud Run, Firestore, Cloud Build, BigQuery) memudahkan agen untuk mengambil secret, melakukan streaming log, dan memperbaiki masalah secara langsung dengan aman.

Dalam codelab ini, Anda akan membuat DinoQuest — game petualangan dinosaurus yang didukung Gemini — dari nol dan menghubungkannya ke pipeline CI/CD yang sepenuhnya agentic. Pada akhir proses, Anda akan:
- Aplikasi web DinoQuest yang berfungsi dan berjalan di Cloud Run (nama layanan:
dinoquest) - Pipeline analisis log yang men-streaming log Cloud Run ke BigQuery dan menghasilkan dasbor insight game interaktif
- Agen Remediasi (
remediation-agent) — agen remediasi ADK yang memantau error Cloud Run dan memperbaikinya secara otomatis, di-deploy sebagai layanan Cloud Run-nya sendiri yang dipicu oleh Eventarc - Agen CI (
ci-agent) yang membaca diff PR Anda, mencakup pengujian secara cerdas, membuat image Docker melalui Cloud Build, dan memposting status commit kembali ke GitHub - Agen CD yang menilai risiko deployment, membagi traffic, memantau metrik, serta mempromosikan atau membatalkan secara otomatis
Yang akan Anda pelajari
- Cara men-deploy aplikasi full-stack Vite + FastAPI di Cloud Run sebagai satu container
- Cara mengonfigurasi Firebase Auth dan Firestore untuk aplikasi React
- Cara membuat dan men-deploy agen ADK yang bereaksi terhadap peristiwa Pub/Sub melalui Eventarc
- Cara mengarahkan log Cloud Run ke BigQuery dan membuat kueri analisis game
- Cara menulis keterampilan agen untuk CI dan deployment canary
Yang Anda butuhkan
- Project Google Cloud yang mengaktifkan penagihan
- Project Firebase (dapat berupa project GCP yang sama)
- Akun GitHub dan fork repo DinoQuest
- Akses ke Antigravity dengan Gemini (pelaksana agen Google)
- CLI
gclouddiinstal dan diautentikasi — lihat petunjuk penginstalan di bawah node≥ 18 dannpmpython3≥ 3.11gitdangh(GitHub CLI)
Menginstal gcloud CLI
macOS
brew install --cask google-cloud-sdk
Atau, download penginstal dari cloud.google.com/sdk/docs/install.
Windows
winget install Google.CloudSDK
Atau, download penginstal Windows (.exe) dari cloud.google.com/sdk/docs/install dan jalankan.
Setelah menginstal, lakukan inisialisasi dan autentikasi:
gcloud init
gcloud auth login
gcloud auth application-default login
2. Menyiapkan Firebase
Setiap agen memerlukan data untuk melakukan penalaran. DinoQuest menggunakan Firestore dan Firebase Auth untuk menyediakan lapisan data siap produksi yang nantinya akan ditemukan, dieksplorasi, dan diperbarui oleh agen kami menggunakan bahasa alami.
Karena aplikasi ini dibuat melalui AI Studio, aplikasi ini terintegrasi secara mendalam dengan Firebase. Penggunaan Firebase menawarkan beberapa keuntungan, yang paling utama adalah arsitektur yang sudah diamankan dan akses data terkelola langsung, sehingga memastikan status game Anda terlindungi sejak hari pertama.
A. Membuat project Firebase
- Buka console.firebase.google.com
- Klik Tambahkan project (Tersembunyi di opsi buat project baru) → pilih project GCP yang sudah ada (atau buat project baru)
- Nonaktifkan Google Analytics jika diminta → Buat project (Atau Anda dapat menggunakan setelan default)
B. Mengaktifkan Autentikasi Google
- Di Firebase console, buka Security → Authentication (Get started) → Sign-in method
- Klik Google → alihkan Aktifkan → simpan email dukungan Anda → Simpan
C. Menambahkan localhost sebagai domain resmi
- Masih di Authentication, klik tab Settings
- Di bagian Authorized domains, konfirmasi bahwa
localhosttercantum (secara default, domain ini akan tercantum)
D. Membuat database Firestore
- Buka Database & Storage → Firestore Database → Create database
- Pilih Edisi Standard → Berikutnya
- Pilih region
us-central1(atau cocokkan dengan region Cloud Run Anda) - Pilih Start in production mode → Create
Setelah dibuat, catat ID Database Anda — ID ini akan terlihat seperti (default) kecuali jika Anda menamainya.
E. Menetapkan Aturan Keamanan Firebase
Di Firestore Database → Rules, ganti aturan default dengan:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// ===============================================================
// Helper Functions
// ===============================================================
function isAuthenticated() {
return request.auth != null;
}
function isOwner(userId) {
return isAuthenticated() && request.auth.uid == userId;
}
function isValidUser(data) {
return data.keys().hasAll(['uid', 'email']) &&
data.uid is string && data.uid.size() > 0 &&
(data.email == null || (data.email is string && data.email.matches("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$")));
}
function isValidDinosaur(data) {
return data.keys().hasAll(['userId', 'name', 'type']) &&
data.userId == request.auth.uid &&
data.name is string && data.name.size() > 0 && data.name.size() < 50 &&
data.type in ['Speedy', 'Tank', 'Balanced', 'Agile'];
}
function isValidGame(data) {
return data.keys().hasAll(['userId', 'score']) &&
data.userId == request.auth.uid &&
data.score is number && data.score >= 0;
}
match /users/{userId} {
allow read: if isOwner(userId);
allow create: if isOwner(userId) && isValidUser(request.resource.data);
allow update: if isOwner(userId) && isValidUser(request.resource.data);
match /dinosaurs/{dinoId} {
allow read: if isOwner(userId);
allow create: if isOwner(userId) && isValidDinosaur(request.resource.data);
allow update: if isOwner(userId) && isValidDinosaur(request.resource.data);
}
match /games/{gameId} {
allow read: if isOwner(userId);
allow create: if isOwner(userId) && isValidGame(request.resource.data);
}
match /seenAnnouncements/{announcementId} {
allow read, create: if isOwner(userId);
}
}
match /announcements/{announcementId} {
allow read: if isAuthenticated();
}
// Default deny
match /{document=**} {
allow read, write: if false;
}
match /scores/{scoreId} {
allow read: if true;
allow create: if isAuthenticated();
allow update: if false;
}
}
}
Klik Publikasikan.
F. Menambahkan aplikasi web dan mendapatkan konfigurasi
- Buka Setelan project (ikon roda gigi) → tab Umum
- Scroll ke Aplikasi Anda → klik Tambahkan aplikasi → pilih ikon Web (
) - Beri nama
dinoquest→ Daftarkan aplikasi - Salin objek
firebaseConfigyang ditampilkan — Anda akan membutuhkannya sebentar lagi
3. Menjalankan Game
Peran Agen: Lingkungan. Sebelum menetapkan agen untuk bekerja, kita memerlukan dunia yang dapat mereka kelola. Pada langkah ini, kita akan men-deploy versi "Day One" DinoQuest. Tindakan ini akan membuat layanan, log, dan status aktif yang akan ditemukan dan dikelola oleh swarm kita nanti.

Pilih salah satu dari dua opsi di bawah. Keduanya menghasilkan GEMINI_API_KEY yang Anda gunakan secara identik di setiap langkah berikutnya — tidak ada perubahan lain yang diperlukan.
A. Menyiapkan kunci Gemini API
Opsi A — Kunci API Vertex AI Gemini (direkomendasikan jika Anda memiliki project GCP)
Vertex AI memungkinkan Anda membuat kunci API Gemini yang terikat langsung ke project GCP Anda dan ditagih ke project tersebut, menggunakan akun layanan default project — tidak memerlukan akun AI Studio terpisah.
- Ekspor ID project GCP Anda:
export PROJECT_ID=<YOUR_PROJECT_ID> - Aktifkan API yang diperlukan dan berikan izin yang diperlukan ke akun layanan default Compute Engine:
gcloud auth application-default set-quota-project $PROJECT_ID gcloud config set project $PROJECT_ID # Enable Vertex AI, Compute Engine, and Generative Language APIs gcloud services enable aiplatform.googleapis.com \ compute.googleapis.com \ generativelanguage.googleapis.com # Grant Vertex AI User role to the default compute service account PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)") gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --role="roles/aiplatform.user" \ --condition=None - Buka halaman kunci API Vertex AI di Konsol Cloud
- Klik Create Credentials → pilih API Key
- Dalam dialog pembuatan:
- Beri nama kunci
Dino_Key - Centang kotak Autentikasi panggilan API melalui akun layanan
- Di bagian Service account, pilih default compute service account (
PROJECT_NUMBER-compute@developer.gserviceaccount.com) - Kembali ke Pilih pembatasan API, centang GEMINI API
- Klik Buat
- Beri nama kunci
- Salin kunci yang dibuat.
Opsi B — AI Studio (paling cepat untuk pengembangan lokal)
- Buka aistudio.google.com
- Klik Dapatkan kunci API di sidebar kiri
- Klik Buat kunci API → pilih project GCP Anda → salin kunci
Salah satu kunci ditetapkan sebagai GEMINI_API_KEY dalam langkah-langkah berikutnya — backend memperlakukannya secara identik.
Melakukan cloning repositori
Repositori kursus berada di https://github.com/gca-americas/dinoquest. Lakukan fork terlebih dahulu ke akun GitHub Anda. Kami akan meminta agen mengerjakan repo Anda.
Setelah melakukan fork, clone cabang main dari repositori DinoQuest yang Anda fork dan masukkan direktori project:
git clone https://github.com/YOUR_GITHUB_USERNAME/dinoquest.git
cd dinoquest
B. Menyiapkan Variabel Lingkungan
Di setiap terminal bash baru yang Anda buka selama codelab ini, pastikan untuk menetapkan variabel lingkungan penting ini. Ganti nilai placeholder dengan detail project Anda yang sebenarnya:
Pertama, ekspor URL repositori GitHub Anda:
export GITHUB_REPO_URL=https://github.com/YOUR_GITHUB_USERNAME/dinoquest
Kemudian, ekspor variabel lingkungan yang tersisa:
export PROJECT_ID=your-project-id
export GOOGLE_CLOUD_PROJECT=$PROJECT_ID
export CLOUD_RUN_REGION=us-central1
export GOOGLE_GENAI_USE_VERTEXAI=True
export HARNESS_EVENTS_TOPIC=projects/$PROJECT_ID/topics/harness-events
export CLOUD_BUILD_REPO=<YOUR_GITHUB_USERNAME>-dinoquest
Pastikan struktur terlihat benar:
dinoquest/
├── backend/ # FastAPI backend (serves frontend + Gemini API calls)
├── frontend/ # React/Vite frontend
├── skills/ # Agentic CI/CD skill files
├── Dockerfile # Multi-stage build (React → Python)
├── start.sh # Local dev launcher
└── README.md
B. Buat file lingkungan backend
Pertama, ekspor kunci Gemini API Anda:
export GEMINI_API_KEY=YOUR_GEMINI_API_KEY_FROM_STEP_2
Kemudian, buat file .env:
cat > backend/.env <<EOF
GEMINI_API_KEY=$GEMINI_API_KEY
GOOGLE_GENAI_USE_VERTEXAI=False
GOOGLE_CLOUD_PROJECT=$PROJECT_ID
EOF
C. Aktifkan Firebase App Check / Akun Layanan (untuk Cloud Run)
Saat berjalan di Cloud Run, backend menggunakan Kredensial Default Aplikasi untuk berkomunikasi dengan Firebase — tidak memerlukan file kunci akun layanan. Panggilan firebase_admin.initialize_app() di backend/main.py akan otomatis mengambilnya.
Untuk pengembangan lokal, lakukan autentikasi sekali:
gcloud auth application-default login
D. Buat file konfigurasi aplikasi Firebase
Di direktori frontend/, buat firebase-applet-config.json dengan konfigurasi Anda dari langkah sebelumnya:
{
"apiKey": "YOUR_API_KEY",
"authDomain": "YOUR_PROJECT_ID.firebaseapp.com",
"projectId": "YOUR_PROJECT_ID",
"storageBucket": "YOUR_PROJECT_ID.appspot.com",
"messagingSenderId": "YOUR_SENDER_ID",
"appId": "YOUR_APP_ID",
"firestoreDatabaseId": "(default)"
}
Catatan: firestoreDatabaseId harus cocok dengan ID database yang Anda buat pada langkah sebelumnya. Jika Anda menggunakan default, biarkan sebagai "(default)".
Lakukan perubahan kembali ke repositori Anda:
git add frontend/firebase-applet-config.json
git commit -m "chore: add firebase config"
git push origin main
C. Menjalankan DinoQuest secara lokal
1. Aktifkan API yang diperlukan
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
secretmanager.googleapis.com \
firestore.googleapis.com \
logging.googleapis.com \
pubsub.googleapis.com \
eventarc.googleapis.com \
aiplatform.googleapis.com \
bigquery.googleapis.com \
aiplatform.googleapis.com
2. Mulai DinoQuest
Skrip start.sh membangun frontend React dan menyerahkan terminal ke backend FastAPI, yang melayani file statis yang dikompilasi:
cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt -q
cd ..
# Force-remove the Vertex AI flag from the current terminal session to avoid conflicts
unset GOOGLE_GENAI_USE_VERTEXAI
./start.sh
Buka http://localhost:8000 di browser Anda. Anda akan melihat layar judul DinoQuest. Login dengan Google, buat dinosaurus pertama Anda, dan konfirmasi bahwa dinosaurus tersebut disimpan ke Firestore.
Pemecahan masalah: Jika Anda melihat halaman kosong atau error autentikasi Firebase, periksa kembali apakah frontend/firebase-applet-config.json memiliki nilai yang benar dan localhost ada dalam daftar domain yang diizinkan.
E. Men-deploy DinoQuest ke Cloud Run
1. Menetapkan project Anda
export PROJECT_ID=$(gcloud config get-value project)
3. Membuat repositori Artifact Registry
gcloud artifacts repositories create dinoquest \
--repository-format=docker \
--location=$CLOUD_RUN_REGION \
--description="DinoQuest container images"
4. Menyimpan kunci Gemini API di Secret Manager
echo -n $GEMINI_API_KEY | \
gcloud secrets create gemini-api-key --data-file=-
# Grant the default compute service account access to the secret
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
gcloud secrets add-iam-policy-binding gemini-api-key \
--member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
5. Bangun image container dengan Cloud Build
gcloud builds submit \
--tag $CLOUD_RUN_REGION-docker.pkg.dev/$PROJECT_ID/dinoquest/app:latest .
Tindakan ini akan menjalankan Dockerfile multi-tahap: membangun aplikasi React terlebih dahulu, lalu mengemas output ke dalam image FastAPI. Memerlukan waktu sekitar 3–5 menit.
6. Men-deploy ke Cloud Run
Pertama, ekspor email admin Anda:
export ADMIN_EMAIL=<YOUR_TEST_ACCOUNT_EMAIL>
Kemudian, deploy layanan:
gcloud run deploy dinoquest \
--image=$CLOUD_RUN_REGION-docker.pkg.dev/$PROJECT_ID/dinoquest/app:latest \
--region=$CLOUD_RUN_REGION \
--platform=managed \
--allow-unauthenticated \
--memory=128Mi \
--set-secrets="GEMINI_API_KEY=gemini-api-key:latest" \
--set-env-vars="ADMIN_EMAILS=$ADMIN_EMAIL" \
--set-env-vars="GOOGLE_GENAI_USE_VERTEXAI=False" \
--set-env-vars="GOOGLE_CLOUD_PROJECT=$PROJECT_ID"
Setelah perintah selesai, Cloud Run akan mencetak Service URL. Salin URL ini — Anda akan memerlukannya untuk mengotorisasi domain di Firebase.
7. Memberikan otorisasi domain Cloud Run di Firebase
Agar pengguna dapat login dari aplikasi yang di-deploy, Anda harus menambahkan URL Cloud Run ke domain resmi Firebase:
- Kembali ke Firebase console → Authentication → Settings → Authorized domains
- Klik Tambahkan domain.
- Tempelkan URL layanan Cloud Run Anda (misalnya,
dinoquest-xxxxx.us-central1.run.app) — hapus awalanhttps:// - Klik Simpan
8. Menambahkan Data Papan Peringkat
Untuk memberikan "kehidupan" awal pada game Anda dan memastikan agen Anda memiliki data, Anda dapat mengisi papan peringkat dengan beberapa skor awal.
- Pastikan Anda berada di direktori root
dinoquest:cd ~/dinoquest - Buat dan aktifkan lingkungan virtual:
python3 -m venv venv source venv/bin/activate - Instal dependensi Firestore yang diperlukan:
pip install google-cloud-firestore - Jalankan skrip pengisian data:
python3 prep/seed_scores.py - Nonaktifkan lingkungan virtual:
deactivate
Sekarang Anda dapat membuka URL Layanan di browser — DinoQuest sudah sepenuhnya aktif.
4. Menyiapkan Dino Theater
Peran Agen: Visualizer. Bagaimana cara memantau tim agen otonom? Dino Theater memberikan jendela real-time ke dalam pikiran sekelompok agen Anda. Daripada menatap log terminal, Anda dapat melihat agen Anda bernalar, saling memanggil, dan menjalankan tugas di seluruh cloud dalam dasbor visual live.

A. Men-deploy Dino Theater ke Cloud Run
Pertama, kembali ke direktori utama Anda dan clone kode Dino Theater:
cd ~
git clone https://github.com/gca-americas/dinoquest-theater.git
cd dinoquest-theater
- Buat dan kirim container:
gcloud builds submit --tag $CLOUD_RUN_REGION-docker.pkg.dev/$PROJECT_ID/dinoquest/dino-theater:latest . - Menyiapkan Akun Layanan & Izin:
# Create the service account gcloud iam service-accounts create dino-theater # Create the Pub/Sub topic (if you haven't yet) gcloud pubsub topics create harness-events # Create the subscription gcloud pubsub subscriptions create harness-events-theater \ --topic=harness-events # Grant subscriber role gcloud pubsub subscriptions add-iam-policy-binding harness-events-theater \ --member="serviceAccount:dino-theater@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/pubsub.subscriber" - Deploy aplikasi:
Catatan:gcloud run deploy dino-theater \ --image $CLOUD_RUN_REGION-docker.pkg.dev/$PROJECT_ID/dinoquest/dino-theater:latest \ --region=$CLOUD_RUN_REGION \ --service-account=dino-theater@${PROJECT_ID}.iam.gserviceaccount.com \ --set-env-vars="GOOGLE_CLOUD_PROJECT=$PROJECT_ID" \ --allow-unauthenticated \ --min-instances=1--min-instances=1direkomendasikan untuk menjaga koneksi SSE tetap aktif di antara peristiwa. - Verifikasi apakah berfungsi: Buka URL Layanan yang di-deploy di browser Anda (misalnya,
https://dino-theater-xxx-uc.a.run.app/demo).
5. Agentic DevOps di IDE
Peran Agen: Antigravitasi Native. Untuk menjembatani kesenjangan antara IDE dan cloud, kita menghubungkan Antigravity ke server MCP Terkelola Google Cloud. Dengan demikian, agen native Anda dapat ‘melihat' project Anda, sehingga dapat mem-parsing log, memeriksa metrik, dan memahami infrastruktur tanpa Anda harus mengelola kunci API atau beralih konteks ke konsol.
Sebelum menjalankan keterampilan apa pun, Anda perlu mengonfigurasi akses Antigravity ke Google Cloud dan memuat buku pedoman keterampilan DinoQuest.
A. Menginstal layanan MCP Terkelola Google
Layanan MCP Terkelola Google menyediakan akses ke semua Google Cloud API melalui satu endpoint yang dihosting.
Lakukan autentikasi menggunakan Kredensial Default Aplikasi:
gcloud auth application-default login
B. Mengonfigurasi mcp_config.json
Buat atau perbarui mcp_config.json di direktori konfigurasi Antigravity (biasanya ~/.gemini/antigravity/mcp_config.json). atau dari konsol. Hal ini memberi Antigravity akses ke alat Google Cloud dan GitHub yang dibutuhkan oleh keterampilan tersebut:
{
"mcpServers": {
"google-developer-knowledge": {
"serverUrl": "https://developerknowledge.googleapis.com/mcp",
"authProviderType": "google_credentials"
},
"google-bigquery": {
"serverUrl": "https://bigquery.googleapis.com/mcp",
"authProviderType": "google_credentials"
},
"google-cloud-logging": {
"serverUrl": "https://logging.googleapis.com/mcp",
"authProviderType": "google_credentials"
},
"google-cloud-monitoring": {
"serverUrl": "https://monitoring.googleapis.com/mcp",
"authProviderType": "google_credentials",
"disabledTools": [
"get_dashboard",
"list_dashboards"
]
},
"google-cloud-run": {
"serverUrl": "https://run.googleapis.com/mcp",
"authProviderType": "google_credentials",
"disabledTools": [
"deploy_service_from_image",
"deploy_service_from_archive",
"deploy_service_from_file_contents"
]
},
"google-cloud-sql": {
"serverUrl": "https://sqladmin.googleapis.com/mcp",
"authProviderType": "google_credentials",
"disabled": true
},
"google-cloud-trace": {
"serverUrl": "https://cloudtrace.googleapis.com/mcp",
"authProviderType": "google_credentials"
},
"google-error-reporting": {
"serverUrl": "https://clouderrorreporting.googleapis.com/mcp",
"authProviderType": "google_credentials"
},
"google-firestore": {
"serverUrl": "https://firestore.googleapis.com/mcp",
"authProviderType": "google_credentials"
},
"google-resource-manager": {
"serverUrl": "https://cloudresourcemanager.googleapis.com/mcp",
"authProviderType": "google_credentials"
},
"gemini-cloud-assist": {
"serverUrl": "https://geminicloudassist.googleapis.com/mcp",
"authProviderType": "google_credentials"
}
}
}
C. Memuat keahlian ke Antigravity (Opsional)
Antigravity menemukan keterampilan di direktori standar tertentu. Salin keterampilan DinoQuest dari repositori yang di-clone ke folder keterampilan Antigravity global:
# Create the standard skills directory if it doesn't exist
mkdir -p ~/.gemini/antigravity/skills
# Copy all DinoQuest skills into the global skills folder
cp -r skills/* ~/.gemini/antigravity/skills/
D. Mulai Ulang Antigravity(Opsional)
Untuk menerapkan perubahan mcp_config.json dan memuat keterampilan yang baru disalin, mulai ulang aplikasi Antigravity.
Setelah dimulai ulang:
- Pastikan server MCP google dan github menampilkan status "Terhubung" berwarna hijau di Setelan.
- Pastikan keterampilan DinoQuest muncul dalam daftar keterampilan Anda.
Catatan: Setiap keterampilan memiliki tabel ## Configuration di bagian atas SKILL.md-nya. Setelah menyalin, Anda harus memperbarui nilai di ~/.gemini/antigravity/skills/ agar sesuai dengan project Anda.
E. Memperbaiki layanan cloud di IDE lokal
- Memicu error: Buka URL DinoQuest yang di-deploy (dari langkah terakhir) di browser Anda.
- Buka Papan Peringkat: Klik tombol Papan Peringkat. Implementasi papan peringkat saat ini sengaja dibuat tidak efisien—papan peringkat akan mencoba memuat data dalam jumlah besar ke dalam memori, sehingga memicu error Kehabisan Memori (OOM).
- Di Antigravity Agent Manager (Agent HUB), minta bantuan untuk memulihkan error dan kemungkinan memperbaiki penyebab utamanya.
- perintah 1: Cari tahu masalah yang terjadi pada dinoquest.
- Perintah 2: Dapatkah Anda melihat kode untuk game Dinoquest dan memperbaiki penyebab error kehabisan memori?
6. Melakukan streaming log ke BigQuery dan membuat analisis
Peran Agen: Agen Data. Mengubah log mentah menjadi strategi produk yang dapat ditindaklanjuti tidak boleh memerlukan waktu berjam-jam untuk pemrosesan data manual. Dengan menggunakan Data Agent Kit dan MCP BigQuery, kami membuat pipeline 'Zero ETL' yang mengalirkan log langsung ke BigQuery, sehingga memungkinkan agen membuat dasbor analisis premium dalam waktu kurang dari dua menit.
Kumpulan keterampilan log-router-bq-report menyiapkan sink Cloud Logging yang terus-menerus mengalirkan log Cloud Run DinoQuest ke BigQuery, lalu mengkueri data untuk menghasilkan laporan traffic dan insight analisis game.

A. Mengonfigurasi variabel skill
Buka skills/log-router-bq-report/SKILL.md di repo DinoQuest Anda dan perbarui bagian Configuration di bagian atas:
| Variable | Your Value |
|---------------|--------------------|
| SERVICE_NAME | dinoquest |
| BQ_DATASET | dinoquest_logs |
| LOG_SINK_NAME | dinoquest-bq-sink |
B. Menjalankan keahlian di Antigravity
Buka Antigravity dengan repo DinoQuest sebagai konteks dan beri tahu Gemini:
Run the log-router-bq-report skill
Keterampilan ini akan:
- Menyelesaikan project GCP secara otomatis
- Periksa apakah sink BigQuery sudah ada — jika tidak, sink tersebut akan membuat set data dan sink.
- Memberi izin IAM: Tindakan ini akan memberi
writerIdentitysink peran BigQuery Data Editor pada set data.
Catatan: Sama seperti sink Eventarc, Anda mungkin melihat peringatan dari gcloud selama proses ini: "Jangan lupa untuk memberikan peran BigQuery Data Editor pada set data ke serviceAccount:service-...." Skill akan menanganinya secara otomatis.
C. Menggunakan Antigravity untuk membuat laporan
Cukup minta Antigravity untuk "menyiapkan sink log BigQuery dan membuat laporan analisis". Agen akan:
- Konfigurasi Infrastruktur: Buat set data BigQuery dan sink Cloud Logging.
- Kelola Izin: Memberikan peran IAM yang diperlukan secara otomatis ke identitas penulis sink.
- Buat Insight: Menganalisis log dan menghasilkan dasbor HTML interaktif premium dengan telemetri game dan analisis rasio kemenangan.
7. Agen Perbaikan Mandiri
Peran Agen: Agen SRE. Jika layanan produksi gagal pada pukul 02.00, Anda tidak perlu bangun. Agen ini bertindak sebagai responden pertama Anda. Dipicu oleh log error Cloud Run melalui Eventarc, alat ini otomatis menganalisis error, menyarankan perbaikan, dan memulai pipeline perbaikan—semuanya sebelum Anda login ke konsol.
DinoAgent adalah agen ADK yang memantau log error Cloud Run melalui Eventarc, mendiagnosis penyebab masalah, dan melakukan perbaikan otomatis — baik dengan meningkatkan memori, mengembalikan traffic, atau mengajukan PR perbaikan kode di GitHub.

A. Buat clone repositori Remediation Agent
cd ~
git clone https://github.com/gca-americas/dinoquest-reme-agent.git
cd dinoquest-reme-agent
Struktur project:
dinoquest-reme-agent/
├── main.py # Service entrypoint — receives Eventarc HTTP POST, runs agent
├── runner.py # ADK Runner + session service
├── agent.py # LlmAgent definition, loads skill from file
├── tools.py # Cloud Run v2 API tools (list/get/rollback/update)
├── skills/
│ └── remediation/
│ ├── SKILL.md # Agent playbook — edit this to change behavior
│ └── scripts/ # Shell scripts for the code-fix track
│ ├── clone_repo.sh
│ ├── read_file.sh
│ ├── apply_fix.sh
│ ├── commit_branch.sh
│ ├── open_pr.sh
│ └── rollback_fix.sh
├── requirements.txt
└── Dockerfile
B. Menyiapkan akses GitHub (jalur perbaikan kode)
Jalur perbaikan kode meng-clone repo DinoQuest Anda, membaca file sumber, menerapkan patch, dan membuka PR. Token ini memerlukan Token Akses Pribadi GitHub dengan cakupan repo.
- Buka github.com/settings/tokens → Generate new token (classic)
- Beri nama, pilih cakupan
repo→ Buat token → salin token
Simpan di Secret Manager:
Pertama, ekspor token GitHub Anda:
export GH_TOKEN=ghp_YOUR_TOKEN_HERE
Kemudian, buat secret:
echo -n $GH_TOKEN | \
gcloud secrets create github-token --data-file=-
C. Menyiapkan notifikasi Slack (opsional)
Setelah perbaikan selesai, DinoAgent akan memposting ringkasan ke saluran Slack.
- Buka api.slack.com/apps → Create New App → From scratch
- Beri nama
DinoAgent, pilih ruang kerja Anda → Buat Aplikasi - Di bagian Fitur → Webhook Masuk → aktifkan
- Klik Add New Webhook to Workspace → pilih saluran → Izinkan
- Salin URL webhook (
https://hooks.slack.com/services/...)
Simpan di Secret Manager:
export SLACK_TOKEN=YOUR_SLACK_WEBHOOK
echo -n "https://hooks.slack.com/services/$SLACK_TOKEN" | \
gcloud secrets create slack-webhook --data-file=-
D. Buat akun layanan DinoAgent
gcloud iam service-accounts create remediation-agent \
--display-name="Cloud Run Remediation Agent"
export SA="remediation-agent@${PROJECT_ID}.iam.gserviceaccount.com"
for ROLE in \
roles/run.admin \
roles/iam.serviceAccountUser \
roles/eventarc.eventReceiver \
roles/aiplatform.user \
roles/artifactregistry.reader \
roles/secretmanager.secretAccessor \
roles/pubsub.publisher \
roles/logging.viewer; do
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${SA}" --role="$ROLE" \
--condition=None
done
Berikan akses ke secret:
for SECRET in github-token slack-webhook; do
gcloud secrets add-iam-policy-binding $SECRET \
--member="serviceAccount:${SA}" \
--role="roles/secretmanager.secretAccessor"
done
E. Membangun dan men-deploy DinoAgent ke Cloud Run
# Get Project Number for the CIAgent URL
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
export CIAGENT_URL=https://ci-agent-${PROJECT_NUMBER}.${CLOUD_RUN_REGION}.run.app
export SA="remediation-agent@${PROJECT_ID}.iam.gserviceaccount.com"
export GITHUB_REPO_URL=https://github.com/YOUR_REPO
HARNESS_EVENTS_TOPIC=projects/$PROJECT_ID/topics/harness-events
AGENT_IMAGE="$CLOUD_RUN_REGION-docker.pkg.dev/${PROJECT_ID}/dinoquest/remediation-agent:latest"
gcloud builds submit --tag $AGENT_IMAGE .
gcloud run deploy remediation-agent \
--image=$AGENT_IMAGE \
--region=$CLOUD_RUN_REGION \
--service-account=$SA \
--memory=2Gi \
--set-env-vars="GOOGLE_CLOUD_PROJECT=${PROJECT_ID},GOOGLE_GENAI_USE_VERTEXAI=True" \
--set-env-vars="GITHUB_REPO_URL=${GITHUB_REPO_URL}" \
--set-secrets="SLACK_WEBHOOK_URL=slack-webhook:latest" \
--set-env-vars="HARNESS_EVENTS_TOPIC=${HARNESS_EVENTS_TOPIC}" \
--set-env-vars="CIAGENT_URL=${CIAGENT_URL}" \
--set-secrets="GITHUB_TOKEN=github-token:latest" \
--no-allow-unauthenticated \
--min-instances=1 \
--no-cpu-throttling \
--timeout=300
F. Hubungkan pemicu Eventarc
Buat topik Pub/Sub untuk menerima log error Cloud Run:
gcloud pubsub topics create cloud-run-errors
Buat sink Cloud Logging yang memfilter log error dari layanan dinoquest dan merutekannya ke topik:
export SERVICE_NAME=dinoquest
FILTER="resource.type=\"cloud_run_revision\" resource.labels.service_name=\"$SERVICE_NAME\" severity=ERROR NOT logName=~\"cloudaudit\" NOT httpRequest.requestUrl=~\"/_ah/health\""
gcloud logging sinks create cloud-run-errors-sink \
pubsub.googleapis.com/projects/${PROJECT_ID}/topics/cloud-run-errors \
--log-filter="$FILTER"
Catatan: Saat Anda menjalankan perintah di atas, gcloud akan mencetak pesan Info yang menyatakan: "Jangan lupa untuk memberikan peran Pub/Sub Publisher pada topik ke serviceAccount:service-...." Langkah berikutnya akan menangani hal tersebut.
Beri identitas penulis sink (akun layanan yang disebutkan dalam peringatan) izin untuk memublikasikan:
SINK_SA=$(gcloud logging sinks describe cloud-run-errors-sink \
--format='value(writerIdentity)')
gcloud pubsub topics add-iam-policy-binding cloud-run-errors \
--member="${SINK_SA}" --role="roles/pubsub.publisher"
Pastikan sudah aktif:
gcloud eventarc triggers describe remediation-trigger --location=$CLOUD_RUN_REGION
Beri Eventarc izin untuk memanggil agen perbaikan:
gcloud run services add-iam-policy-binding remediation-agent \
--region=$CLOUD_RUN_REGION \
--member="serviceAccount:${SA}" \
--role="roles/run.invoker"
Buat pemicu Eventarc:
gcloud eventarc triggers create remediation-trigger \
--location=$CLOUD_RUN_REGION \
--destination-run-service=remediation-agent \
--destination-run-region=$CLOUD_RUN_REGION \
--event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
--transport-topic=projects/${PROJECT_ID}/topics/cloud-run-errors \
--service-account=${SA}
Perbaikan kini sepenuhnya otomatis. Selain hanya menskalakan infrastruktur, DinoAgent melakukan analisis akar masalah yang mendalam pada kode aplikasi, menerapkan patch semantik, dan menggunakan komunikasi Agent-to-Agent (A2A) untuk menyerahkan perbaikan ke CI Agent untuk verifikasi dan deployment. Anda dapat mempelajari detail penerapan di codebase reme-agent.
8. Menyiapkan agen CI
Peran Agen: Pipeline CI. Berhenti bergelut dengan file YAML yang kompleks dan skrip build manual. Agen ini mengelola infrastruktur operasional PR Anda. Alat ini membaca perubahan kode Anda, memahami konteks, menentukan cakupan pengujian yang diperlukan, dan membangun image Docker Anda melalui Cloud Build, sehingga memastikan setiap commit "disetujui agen" sebelum mencapai cabang utama.
ci-agent adalah agen pipeline CI otonom yang di-deploy sebagai layanan Cloud Run. Skrip ini mengirimkan build Docker ke Cloud Build, melakukan polling untuk penyelesaian, memverifikasi image di Artifact Registry, dan melaporkan ke GitHub.

Mengapa menggunakan agen untuk pipeline CI? Tidak seperti skrip statis tradisional, pipeline CI agentik menyediakan:
- Klasifikasi Cakupan Kognitif (Cognitive Scope Classification): Secara cerdas, fitur ini menentukan kedalaman pengujian yang diperlukan—beralih antara pemeriksaan jenis, pengujian unit, atau rangkaian integrasi lengkap—berdasarkan dampak semantik perubahan kode Anda.
- Pengelolaan PR secara Otonom: Agen dapat membuat PR secara otomatis, memposting ringkasan perubahan yang mendetail, dan bahkan mengelola pemindaian rahasia dan audit keamanan tanpa intervensi manusia.
- Diagnosis Kegagalan Real-time: Saat build gagal, agen tidak hanya menampilkan log; agen menganalisis stack trace, mengidentifikasi kemungkinan penyebab, dan memposting diagnosis yang dapat dibaca manusia langsung ke PR.
A. Buat clone repositori CIAgent
cd ~
git clone https://github.com/gca-americas/dinoquest-ci-agent.git
cd dinoquest-ci-agent
B. Buat akun layanan CIAgent
gcloud iam service-accounts create ci-agent \
--display-name="CIAgent CI Pipeline"
export SA="ci-agent@${PROJECT_ID}.iam.gserviceaccount.com"
# Grant necessary roles to the service account
for ROLE in \
roles/cloudbuild.builds.editor \
roles/cloudbuild.builds.builder \
roles/artifactregistry.reader \
roles/artifactregistry.writer \
roles/aiplatform.user \
roles/secretmanager.secretAccessor \
roles/pubsub.publisher \
roles/developerconnect.admin; do
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${SA}" --role="$ROLE" \
--condition=None
done
# ci-agent needs to act as itself when running build steps
gcloud iam service-accounts add-iam-policy-binding $SA \
--member="serviceAccount:${SA}" \
--role="roles/iam.serviceAccountUser"
C. Menghubungkan repositori GitHub ke Cloud Build
CIAgent mengirimkan build melalui repoSource, yang mengharuskan repositori GitHub terhubung ke Cloud Build Developer Connect.
- Buka GCP Console → Cloud Build → Repositories
- Klik Connect Repository.
- Pilih GitHub (Cloud Build GitHub App).
- Beri otorisasi dan pilih repositori
YOUR_GITHUB_USERNAME/dinoquestAnda - Klik Hubungkan dan Lewati saat diminta untuk membuat pemicu.
- Catat nama koneksi Anda (defaultnya biasanya nama pengguna GitHub Anda atau yang serupa).
D. Memberikan akses CIAgent ke secret
Kita akan menggunakan kembali secret yang dibuat sebelumnya untuk DinoAgent:
gcloud secrets add-iam-policy-binding github-token \
--member="serviceAccount:${SA}" \
--role="roles/secretmanager.secretAccessor"
gcloud secrets add-iam-policy-binding slack-webhook-ci \
--member="serviceAccount:${SA}" \
--role="roles/secretmanager.secretAccessor"
E. Membangun dan men-deploy CIAgent ke Cloud Run
# Set up required variables for orchestration
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
export CDAGENT_URL=https://cd-agent-${PROJECT_NUMBER}.${CLOUD_RUN_REGION}.run.app
export CI_AGENT_URL=ci-agent-${PROJECT_NUMBER}.${CLOUD_RUN_REGION}.run.app
export GITHUB_OWNER="YOUR_GITHUB_USERNAME"
export CLOUD_BUILD_CONNECTION="YOUR_CONNECTION_NAME" # Update this if your connection name is different
export CLOUD_BUILD_REPO="YOUR_GITHUB_USERNAME-dinoquest" # Update this if your connection name is different
export SLACK_TOKEN=YOUR_SLACK_WEBHOOK
echo -n "https://hooks.slack.com/services/$SLACK_TOKEN" | \
gcloud secrets create slack-webhook-ci --data-file=-
export SA="ci-agent@${PROJECT_ID}.iam.gserviceaccount.com"
AGENT_IMAGE="$CLOUD_RUN_REGION-docker.pkg.dev/${PROJECT_ID}/dinoquest/ci-agent:latest"
gcloud builds submit --tag $AGENT_IMAGE .
gcloud run deploy ci-agent \
--image=$AGENT_IMAGE \
--region=$CLOUD_RUN_REGION \
--service-account=$SA \
--memory=1Gi \
--timeout=600 \
--allow-unauthenticated \
--min-instances=1 \
--set-env-vars="GOOGLE_CLOUD_PROJECT=${PROJECT_ID},GOOGLE_GENAI_USE_VERTEXAI=True" \
--set-env-vars="HARNESS_EVENTS_TOPIC=${HARNESS_EVENTS_TOPIC}" \
--set-env-vars="HOST=${CI_AGENT_URL},PROTOCOL=https" \
--set-secrets="SLACK_WEBHOOK_URL=slack-webhook-ci:latest" \
--set-env-vars="GITHUB_OWNER=${GITHUB_OWNER},GITHUB_REPO=dinoquest" \
--set-env-vars="CLOUD_BUILD_CONNECTION=${CLOUD_BUILD_CONNECTION},CLOUD_BUILD_REPO=${CLOUD_BUILD_REPO},CLOUD_BUILD_REGION=${CLOUD_RUN_REGION}" \
--set-env-vars="CDAGENT_URL=${CDAGENT_URL}" \
--set-secrets="GITHUB_TOKEN=github-token:latest" \
--min-instances=1
F. Penyiapan perintah garis miring Slack
- Buka api.slack.com/apps → Create New App → From scratch
- Beri nama
CIAgent, pilih ruang kerja Anda → Buat Aplikasi - Di bagian Fitur → Perintah Garis Miring → Buat Perintah Baru
- Perintah:
/runci - URL permintaan: URL Cloud Run CIAgent Anda dari atas dengan
/slackditambahkan (mis.https://ci-agent-xxx-.us-central1.run.app/slack) - Deskripsi singkat:
Trigger CI - Simpan
- Di bagian Setelan → Instal Aplikasi, klik Instal ke Workspace dan Izinkan.
Agen CI bertindak sebagai "otak" yang berada di atas layanan Google Cloud yang andal seperti Cloud Build dan Artifact Registry. Setelah build diverifikasi, build akan memicu fase deployment akhir dengan memanggil Agen CD melalui A2A, sehingga memastikan penyerahan yang lancar antara siklus build dan rilis.
9. Menyiapkan Deployment
Peran Agen: Agen CD. Deployment tidak boleh menjadi sesuatu yang tidak pasti. Agen ini mengelola risiko untuk Anda. Layanan ini menilai keamanan deployment, mengelola pemisahan traffic canary, dan memantau metrik real-time untuk memutuskan apakah akan mempromosikan rilis atau mengembalikannya. Ini adalah penjaga gerbang terakhir dalam swarm agen otonom Anda.
cd-agent adalah agen deployment canary otonom yang di-deploy sebagai layanan Cloud Run. Layanan ini menerima permintaan deployment A2A dari ci-agent, menghitung skor risiko, menetapkan persentase canary yang dikalibrasi risiko, memantau metrik, dan mempromosikan atau mengembalikan secara otomatis. Aplikasi ini juga belajar dari deployment sebelumnya menggunakan Firestore.

Menghubungkan agen secara langsung akan membuat "pipeline kognitif" di mana setiap pengalihan adalah transfer intent dan konteks yang kaya. Berbeda dengan webhook tradisional, komunikasi A2A memungkinkan:
- Berbagi Konteks Cerdas: Agen meneruskan seluruh memori sesi, perbedaan PR, dan skor risiko, sehingga memastikan agen berikutnya memiliki "alasan" lengkap sebelum memulai pekerjaan.
- Cognitive Handshakes: Agen dapat menegosiasikan gerbang. Misalnya, CD Agent dapat meminta pengujian ringan tertentu dari CI Agent selama peluncuran canary untuk memverifikasi perbaikan secara real-time.
- Perbaikan Kolaboratif: Jika deployment gagal, Agen CD dapat secara proaktif memberi tahu Agen Perbaikan dengan metrik yang gagal, sehingga memulai analisis penyebab masalah secara otonom bahkan sebelum operator manusia dihubungi.
- Negosiasi Resource: Agen dapat menegosiasikan kebutuhan infrastruktur. Misalnya, Agen CI dapat meminta Agen Remediasi untuk menyediakan kapasitas build yang lebih besar jika mendeteksi refaktor skala besar, atau Agen CD dapat menyarankan penskalaan cluster produksi sebelum rilis besar.
- Konsensus Multi-Agen: Untuk perubahan berisiko tinggi, beberapa agen (misalnya, Agen Keamanan dan Agen CD) dapat melakukan "persetujuan bersama" melalui A2A, sehingga memastikan bahwa kode tidak hanya dibuat dan di-deploy, tetapi juga mematuhi kebijakan keamanan sebelum masuk ke produksi.
A. Buat clone repositori CDAgent
cd ~
git clone https://github.com/gca-americas/dinoquest-cd-agent.git
cd dinoquest-cd-agent
B. Membuat Database Firestore
CDAgent menyimpan pola memori deployment-nya di Firestore:
gcloud firestore databases create \
--region=$CLOUD_RUN_REGION \
--project=$PROJECT_ID
(Jika Anda sudah membuat database dalam project ini, Anda dapat melewati langkah ini.)
C. Buat akun layanan CDAgent
gcloud iam service-accounts create cd-agent \
--display-name="CDAgent Canary Deployer"
export SA="cd-agent@${PROJECT_ID}.iam.gserviceaccount.com"
# Grant necessary roles
for ROLE in \
roles/run.developer \
roles/iam.serviceAccountUser \
roles/artifactregistry.reader \
roles/artifactregistry.writer \
roles/monitoring.viewer \
roles/datastore.user \
roles/aiplatform.user \
roles/run.admin \
roles/pubsub.publisher; do
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${SA}" --role="$ROLE" \
--condition=None
done
D. Memberikan akses CDAgent ke secret
Kita akan menggunakan kembali token GitHub dan webhook Slack dari sebelumnya, serta memberikan akses akun layanan komputasi Cloud Run ke Kunci API Gemini agar aplikasi yang di-deploy dapat menggunakannya:
gcloud secrets add-iam-policy-binding github-token \
--member="serviceAccount:${SA}" \
--role="roles/secretmanager.secretAccessor"
gcloud secrets add-iam-policy-binding slack-webhook-cd \
--member="serviceAccount:${SA}" \
--role="roles/secretmanager.secretAccessor"
# Grant the compute service account access to Gemini API key
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
gcloud secrets add-iam-policy-binding gemini-api-key \
--project=$PROJECT_ID \
--member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
E. Membangun dan men-deploy CDAgent ke Cloud Run
export GITHUB_OWNER="YOUR_GITHUB_USERNAME"
export CD_AGENT_URL=cd-agent-${PROJECT_NUMBER}.${CLOUD_RUN_REGION}.run.app
export SLACK_TOKEN=YOUR_SLACK_WEBHOOK
echo -n "https://hooks.slack.com/services/$SLACK_TOKEN" | \
gcloud secrets create slack-webhook-cd --data-file=-
AGENT_IMAGE="$CLOUD_RUN_REGION-docker.pkg.dev/${PROJECT_ID}/dinoquest/cd-agent:latest"
gcloud builds submit --tag $AGENT_IMAGE .
export SA="cd-agent@${PROJECT_ID}.iam.gserviceaccount.com"
gcloud run deploy cd-agent \
--image=$AGENT_IMAGE \
--region=$CLOUD_RUN_REGION \
--service-account=$SA \
--memory=1Gi \
--set-env-vars="GOOGLE_CLOUD_PROJECT=${PROJECT_ID}" \
--set-env-vars="GOOGLE_GENAI_USE_VERTEXAI=True" \
--set-env-vars="HOST=${CD_AGENT_URL},PROTOCOL=https" \
--set-env-vars="CD_TARGET_SERVICE=dinoquest" \
--set-env-vars="HARNESS_EVENTS_TOPIC=${HARNESS_EVENTS_TOPIC}" \
--set-env-vars="GITHUB_OWNER=${GITHUB_OWNER}" \
--set-env-vars="GITHUB_REPO=dinoquest" \
--set-env-vars="DEMO_MODE=true" \
--set-env-vars="LEADERBOARD_ENABLED=true" \
--set-secrets="SLACK_WEBHOOK_URL=slack-webhook-cd:latest" \
--set-secrets="GITHUB_TOKEN=github-token:latest" \
--allow-unauthenticated \
--min-instances=1 \
--no-cpu-throttling \
--timeout=300
Catatan: --min-instances=1 --no-cpu-throttling menjaga instance tetap aktif sehingga dapat merespons perintah Slack dan A2A dengan cepat.
Agen CD adalah penjaga terakhir lingkungan produksi Anda. Sistem ini mengevaluasi risiko setiap deployment, menjalankan canary yang dikalibrasi risiko, dan memantau metrik real-time. Jika ada anomali yang terdeteksi, sistem akan memulai rollback otomatis.
10. Meningkatkan Skala: Membuka Level 2 dengan Agent Swarm
A. Menguji Full Swarm
- Memicu error: Buka URL DinoQuest yang di-deploy (dari langkah terakhir) di browser Anda.
- Buka Papan Peringkat: Klik tombol Papan Peringkat. Implementasi papan peringkat saat ini sengaja dibuat tidak efisien—papan peringkat akan mencoba memuat data dalam jumlah besar ke dalam memori, sehingga memicu error Kehabisan Memori (OOM).
- Menunggu Agen: Dalam waktu sekitar 60 detik,
remediation-agentakan menerima peristiwa error melalui Eventarc dan memulai diagnosisnya. - Periksa Slack: Anda akan melihat notifikasi di saluran Slack yang terlihat seperti ini:Ringkasan Perbaikan DinoAgent
- Layanan: dinoquest
- Revisi yang gagal: dinoquest-xxxx-xxxx
- Bukti: "Batas memori 128 MiB terlampaui dengan 13x MiB yang digunakan."
- Alasan revisi ini buruk: Endpoint
/api/leaderboardtidak efisien xxxxx, sehingga menyebabkan error OOM. - Tindakan yang dilakukan: Meningkatkan memori dari xMi menjadi yGi untuk layanan
dinoquest. Revisi baru telah dibuat. - PR penyebab masalah: https://github.com/YOUR_USERNAME/DinoQuest/pull/x
- Verifikasi perbaikan:
- GitHub: Periksa repositori Anda untuk menemukan cabang baru dan Permintaan Pull. Agen telah menambal kode aplikasi untuk memperbaiki kebocoran memori yang mendasarinya.
- Cloud Run: Di GCP Console, Anda akan melihat revisi baru layanan
dinoquestdengan alokasi memori yang diperbarui. - Papan Peringkat: Coba papan peringkat lagi—sekarang papan peringkat akan berhasil dimuat berkat peningkatan memori dan perbaikan kode.
B. Evolusi: Menerapkan Logika Game Level 2
Anda akan menambahkan fitur baru yang signifikan: Level 2 (Penghancur Asteroid). Hal ini memungkinkan dinosaurus dengan skor tinggi untuk melanjutkan ke mode game baru.
- Kembali ke repositori dinoquest Anda:
cd ~/dinoquest - Buat dan beralih ke cabang baru:
git checkout -b level_2 - Terapkan patch Level 2: Jalankan skrip yang disediakan untuk menerapkan patch pada codebase lokal Anda dengan aset, komponen, dan logika game Level 2:
bash level_2_backup/levelup.sh - Commit dan kirim perubahan:
git add . git commit -m "feat: add Level 2" git push origin level_2
Daripada menggunakan curl untuk memicu agen secara manual, kita akan menggunakan Perintah Slash Slack yang Anda konfigurasi sebelumnya. Berikut cara berinteraksi dengan pipeline CI otonom dalam skenario dunia nyata.
- Buka Slack dan buka channel tempat aplikasi
CIAgentdiinstal. - Picu build CI dengan mengetik perintah berikut:
/runci run ci on branch level_2 - Memantau progres:
- Slack: Agen akan mengonfirmasi perintah Anda dan memposting update saat build berlangsung.
- Dino Theater: Tonton "balon pikiran" saat agen mengklasifikasikan perubahan, mengirimkan tugas Cloud Build, dan berkomunikasi dengan agen CD.
- GitHub: Periksa PR
level_2Anda; Anda akan melihat agen memposting status commit dan komentar laporan CI lengkap.
- Tonton prosesnya:
- Periksa Dino Theater untuk melihat Agen CI berpikir, mengklasifikasikan perubahan, dan menjalankan pipeline.
- Periksa PR GitHub Anda untuk melihat Agen CI memposting status commit dan laporan akhir.
11. Kesimpulan
Anda telah membangun stack DevOps agentik lengkap di Google Cloud:
Komponen | Fungsinya |
DinoQuest (Cloud Run | Game yang didukung Gemini — Frontend React + backend FastAPI |
Firebase Auth + Firestore | Autentikasi pengguna dan penyimpanan profil dinosaurus |
Remediation Agent (Cloud Run + Eventarc) | Agen SRE yang secara otomatis memperbaiki error OOM dan bug kode |
log-router-bq-report | Agen data yang melakukan streaming log ke BigQuery dan menghasilkan insight |
CIAgent (Cloud Run) | Agen CI yang mencakup pengujian, membangun image, dan memanggil CD melalui A2A |
CDAgent (Cloud Run) | Agen CD yang menjalankan deployment canary dengan skor risiko dan rollback otomatis |
Semua perilaku Agen berada di direktori skills/ sebagai playbook Markdown — ubah perilaku dengan mengedit skill, bukan kode. Keahlian berjalan di Antigravity dengan Gemini dan dipanggil dengan memberi tahu agen keahlian mana yang akan dijalankan.