১. সংক্ষিপ্ত বিবরণ
'দ্বিতীয় দিনে' আপনাকে স্বাগতম। একটি অ্যাপ তৈরি করে 'পাবলিশ' করার অনুভূতিটা জাদুর মতো হলেও, বাস্তব জগতের ট্র্যাফিক বাস্তব ব্যর্থতা নিয়ে আসে। YAML নিয়ে দিনরাত লড়াই করা বা লগ ঘেঁটে খোঁজার পরিবর্তে, আপনি আপনার জন্য অপারেশনাল অবকাঠামো পরিচালনা করার জন্য একদল বিশেষায়িত এজেন্ট তৈরি করতে পারেন। এই কোডল্যাবটি আপনাকে দেখাবে কিভাবে গুগল ক্লাউডের সমন্বিত স্ট্যাক (Eventarc, Cloud Run, Firestore, Cloud Build, BigQuery) এজেন্টদের জন্য সিক্রেট নিরাপদে সংগ্রহ করা, লগ স্ট্রিম করা এবং কোনো সমস্যা ছাড়াই তার সমাধান করা সহজ করে তোলে।

এই কোডল্যাবে আপনি জেমিনি-চালিত ডাইনোসর অ্যাডভেঞ্চার গেম ‘ডাইনোকোয়েস্ট’ একেবারে শুরু থেকে তৈরি করবেন এবং এটিকে একটি সম্পূর্ণ এজেন্টিক CI/CD পাইপলাইনের সাথে সংযুক্ত করবেন। শেষে আপনি যা পাবেন:
- ক্লাউড রানে চলমান একটি কার্যকর ডাইনোকোয়েস্ট ওয়েব অ্যাপ (পরিষেবার নাম:
dinoquest) - একটি লগ অ্যানালিটিক্স পাইপলাইন যা ক্লাউড রান লগগুলিকে বিগকোয়েরিতে স্ট্রিম করে এবং একটি ইন্টারেক্টিভ গেম-ইনসাইটস ড্যাশবোর্ড তৈরি করে।
- রেমিডিয়েশন এজেন্ট (
remediation-agent) — একটি ADK রেমিডিয়েশন এজেন্ট যা ক্লাউড রান-এর ত্রুটিগুলো পর্যবেক্ষণ করে এবং স্বয়ংক্রিয়ভাবে সেগুলো সমাধান করে। এটিকে নিজস্ব ক্লাউড রান সার্ভিস হিসেবে ডেপ্লয় করা হয় এবং ইভেন্টআর্ক (Eventarc) দ্বারা ট্রিগার করা হয়। - একটি CI এজেন্ট (
ci-agent) যা আপনার PR-এর diff পড়ে, বুদ্ধিমত্তার সাথে টেস্টের পরিধি নির্ধারণ করে, Cloud Build-এর মাধ্যমে একটি Docker ইমেজ তৈরি করে এবং GitHub-এ একটি কমিট স্ট্যাটাস পোস্ট করে। - একটি সিডি এজেন্ট যা ডেপ্লয়মেন্ট ঝুঁকির মূল্যায়ন করে, ট্র্যাফিক বিভক্ত করে, মেট্রিক্স নিরীক্ষণ করে এবং স্বয়ংক্রিয়ভাবে প্রমোট বা রোলব্যাক করে।
আপনি যা শিখবেন
- ক্লাউড রান-এ একটি একক কন্টেইনার হিসেবে কীভাবে একটি ফুল-স্ট্যাক Vite + FastAPI অ্যাপ ডেপ্লয় করবেন
- একটি React অ্যাপের জন্য Firebase Auth এবং Firestore কীভাবে কনফিগার করবেন
- Eventarc-এর মাধ্যমে Pub/Sub ইভেন্টে সাড়া দেয় এমন একটি ADK এজেন্ট কীভাবে তৈরি এবং স্থাপন করবেন
- কীভাবে ক্লাউড রান লগগুলিকে বিগকোয়েরিতে রাউট করবেন এবং গেম অ্যানালিটিক্স কোয়েরি করবেন
- CI এবং ক্যানারি ডিপ্লয়মেন্টের জন্য কীভাবে এজেন্টিক স্কিল লিখতে হয়
আপনার যা যা লাগবে
- বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট
- একটি Firebase প্রজেক্ট (এটি একই GCP প্রজেক্টও হতে পারে)
- একটি গিটহাব অ্যাকাউন্ট এবং ডাইনোকোয়েস্ট রিপোটির একটি ফর্ক
- জেমিনি (গুগলের এজেন্ট রানার) এর মাধ্যমে অ্যান্টিগ্র্যাভিটিতে প্রবেশাধিকার
-
gcloudCLI ইনস্টল এবং প্রমাণীকৃত হয়েছে — নিচে ইনস্টলেশনের নির্দেশাবলী দেখুন। -
node≥ ১৮ এবংnpm -
python3≥ ৩.১১ -
gitএবংgh(GitHub CLI)
gcloud CLI ইনস্টল করুন
ম্যাকওএস
brew install --cask google-cloud-sdk
অথবা cloud.google.com/sdk/docs/install থেকে ইনস্টলারটি ডাউনলোড করুন।
উইন্ডোজ
winget install Google.CloudSDK
অথবা cloud.google.com/sdk/docs/install থেকে উইন্ডোজ ইনস্টলার (.exe) ডাউনলোড করে চালান।
ইনস্টল করার পরে, প্রারম্ভিকীকরণ এবং প্রমাণীকরণ করুন:
gcloud init
gcloud auth login
gcloud auth application-default login
২. ফায়ারবেস সেট আপ করুন
প্রতিটি এজেন্টের যুক্তি প্রয়োগের জন্য ডেটা প্রয়োজন। ডাইনোকোয়েস্ট ফায়ারস্টোর এবং ফায়ারবেস অথ ব্যবহার করে একটি প্রোডাকশন-রেডি ডেটা লেয়ার প্রদান করে, যা আমাদের এজেন্টরা পরবর্তীতে স্বাভাবিক ভাষা ব্যবহার করে আবিষ্কার, অন্বেষণ এবং আপডেট করবে।
যেহেতু এই অ্যাপটি এআই স্টুডিও (AI Studio) দিয়ে তৈরি করা হয়েছে, তাই এটি ফায়ারবেস (Firebase)-এর সাথে নিবিড়ভাবে সমন্বিত। ফায়ারবেস ব্যবহারের বেশ কিছু সুবিধা রয়েছে, যার মধ্যে প্রধান হলো এর পূর্ব-সুরক্ষিত আর্কিটেকচার এবং বিল্ট-ইন ম্যানেজড ডেটা অ্যাক্সেস, যা আপনার গেমের স্টেট প্রথম দিন থেকেই সুরক্ষিত রাখে।
এ. একটি ফায়ারবেস প্রজেক্ট তৈরি করুন।
- console.firebase.google.com- এ যান
- অ্যাড প্রজেক্ট-এ ক্লিক করুন (এটি 'ক্রিয়েট আ নিউ প্রজেক্ট' অপশনের ভেতরে লুকানো থাকে) → আপনার বিদ্যমান GCP প্রজেক্টটি নির্বাচন করুন (অথবা একটি নতুন তৈরি করুন)।
- অনুরোধ করা হলে গুগল অ্যানালিটিক্স নিষ্ক্রিয় করুন → প্রজেক্ট তৈরি করুন (অথবা আপনি ডিফল্ট সেটিং ব্যবহার করতে পারেন)
খ. গুগল প্রমাণীকরণ সক্রিয় করুন
- Firebase কনসোলে, Security → Authentication (Get started) → Sign-in method-এ যান।
- Google-এ ক্লিক করুন → সক্ষম করুন → আপনার সাপোর্ট ইমেল সংরক্ষণ করুন → সংরক্ষণ করুন
গ. লোকালহোস্টকে একটি অনুমোদিত ডোমেইন হিসেবে যুক্ত করুন।
- প্রমাণীকরণ পর্যায়ে থাকা অবস্থায়, সেটিংস ট্যাবে ক্লিক করুন।
- অনুমোদিত ডোমেইন- এর অধীনে,
localhostতালিকাভুক্ত আছে কিনা তা নিশ্চিত করুন (এটি ডিফল্টরূপে থাকার কথা)।
D. একটি ফায়ারস্টোর ডাটাবেস তৈরি করুন
- ডেটাবেস ও স্টোরেজ → ফায়ারস্টোর ডেটাবেস → ডেটাবেস তৈরি করুন- এ যান
- স্ট্যান্ডার্ড সংস্করণ বেছে নিন → পরবর্তী
- অঞ্চল নির্বাচন করুন
us-central1(অথবা আপনার ক্লাউড রান অঞ্চলের সাথে মেলান) - প্রোডাকশন মোডে স্টার্ট নির্বাচন করুন → তৈরি করুন
তৈরি হয়ে গেলে, আপনার ডাটাবেস আইডিটি লিখে রাখুন — আপনি এর কোনো নাম না দিয়ে থাকলে এটি (default) এর মতো দেখতে হবে।
ই. ফায়ারবেস নিরাপত্তা নিয়ম সেট করুন
Firestore Database → Rules-এ , ডিফল্ট নিয়মগুলি নিম্নলিখিত দিয়ে প্রতিস্থাপন করুন:
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;
}
}
}
প্রকাশ করুন-এ ক্লিক করুন।
F. একটি ওয়েব অ্যাপ যোগ করুন এবং কনফিগারেশনটি নিন।
- প্রজেক্ট সেটিংস (গিয়ার আইকন) → জেনারেল ট্যাবে যান
- আপনার অ্যাপস- এ স্ক্রোল করুন → অ্যাপ যোগ করুন- এ ক্লিক করুন → ওয়েব আইকনটি বেছে নিন (
>) - এর নাম দিন
dinoquest→ অ্যাপ নিবন্ধন করুন - দেখানো
firebaseConfigঅবজেক্টটি কপি করুন — একটু পরেই আপনার এটি প্রয়োজন হবে।
৩. খেলা পরিচালনা করা
এজেন্টের ভূমিকা: পরিবেশ । আমাদের এজেন্টদের কাজে লাগানোর আগে, তাদের পরিচালনা করার জন্য একটি জগৎ প্রয়োজন। এই ধাপে, আমরা ডাইনোকোয়েস্টের "ডে ওয়ান" সংস্করণটি ডেপ্লয় করব। এটি লাইভ সার্ভিস, লগ এবং স্টেট তৈরি করে, যা আমাদের সোয়ার্ম পরবর্তীতে খুঁজে বের করবে এবং পরিচালনা করবে।

নিচের দুটি বিকল্পের মধ্যে একটি বেছে নিন। যেকোনো একটি বেছে নিলে এমন একটি GEMINI_API_KEY তৈরি হবে যা আপনি পরবর্তী প্রতিটি ধাপে হুবহু ব্যবহার করবেন — অন্য কোনো পরিবর্তনের প্রয়োজন নেই।
এ. জেমিনি এপিআই কী সেট আপ করুন
বিকল্প A — ভার্টেক্স এআই জেমিনি এপিআই কী (আপনার যদি একটি GCP প্রজেক্ট থাকে তবে এটি সুপারিশ করা হয়)
Vertex AI আপনাকে আপনার GCP প্রোজেক্টের ডিফল্ট সার্ভিস অ্যাকাউন্ট ব্যবহার করে সরাসরি প্রোজেক্টের সাথে সংযুক্ত এবং বিল করা একটি Gemini API কী তৈরি করার সুযোগ দেয় — এর জন্য কোনো আলাদা AI Studio অ্যাকাউন্টের প্রয়োজন নেই।
- আপনার GCP প্রজেক্ট আইডি এক্সপোর্ট করুন:
export PROJECT_ID=<YOUR_PROJECT_ID> - প্রয়োজনীয় API-গুলো সক্রিয় করুন এবং 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 - ক্লাউড কনসোলে Vertex AI API কী পেজটি খুলুন।
- ক্রেডেনশিয়াল তৈরি করুন -এ ক্লিক করুন → এপিআই কী নির্বাচন করুন
- তৈরির ডায়ালগে:
-
Dino_Keyকী-টির নাম দিন। - সার্ভিস অ্যাকাউন্টের মাধ্যমে এপিআই কল প্রমাণীকরণ বক্সটি চেক করুন
- সার্ভিস অ্যাকাউন্টের অধীনে, ডিফল্ট কম্পিউট সার্ভিস অ্যাকাউন্টটি (
PROJECT_NUMBER-compute@developer.gserviceaccount.com) নির্বাচন করুন। - 'Select API restrictions'- এ ফিরে গিয়ে, GEMINI API চেক করুন।
- তৈরি করতে ক্লিক করুন
-
- তৈরি হওয়া কী-টি কপি করুন।
বিকল্প B — এআই স্টুডিও (লোকাল ডেভের জন্য দ্রুততম)
- aistudio.google.com খুলুন
- বাম সাইডবারে Get API key-তে ক্লিক করুন
- Create API key-তে ক্লিক করুন → আপনার GCP প্রজেক্টটি বেছে নিন → কী-টি কপি করুন
পরবর্তী ধাপগুলোতে যেকোনো একটি কী-কে GEMINI_API_KEY হিসেবে সেট করা হয় — ব্যাকএন্ড সেগুলোকে একইভাবে বিবেচনা করে।
রিপোজিটরি ক্লোন করুন
কোর্স রিপোজিটরিটি https://github.com/gca-americas/dinoquest -এ রয়েছে। অনুগ্রহ করে প্রথমে এটি আপনার নিজের গিটহাব অ্যাকাউন্টে ফর্ক করুন । আমরা এর পরিবর্তে এজেন্টকে আপনার রিপোতে কাজ করতে দেব।
ফোর্ক করার পর, আপনার ফোর্ক করা DinoQuest রিপোটির main শাখা ক্লোন করুন এবং প্রজেক্ট ডিরেক্টরিতে প্রবেশ করুন:
git clone https://github.com/YOUR_GITHUB_USERNAME/dinoquest.git
cd dinoquest
খ. এনভায়রনমেন্ট ভেরিয়েবল সেট আপ করুন
এই কোডল্যাব চলাকালীন আপনার খোলা প্রতিটি নতুন ব্যাশ টার্মিনালে, এই অপরিহার্য এনভায়রনমেন্ট ভেরিয়েবলগুলো সেট করতে ভুলবেন না। প্লেসহোল্ডার মানগুলো আপনার আসল প্রোজেক্টের বিবরণ দিয়ে প্রতিস্থাপন করুন:
প্রথমে, আপনার গিটহাব রিপোজিটরি ইউআরএল এক্সপোর্ট করুন:
export GITHUB_REPO_URL=https://github.com/YOUR_GITHUB_USERNAME/dinoquest
তারপর অবশিষ্ট এনভায়রনমেন্ট ভেরিয়েবলগুলো এক্সপোর্ট করুন:
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
কাঠামোটি সঠিক দেখাচ্ছে কিনা তা নিশ্চিত করুন:
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
খ. ব্যাকএন্ড এনভায়রনমেন্ট ফাইল তৈরি করুন
প্রথমে, আপনার জেমিনি এপিআই কী এক্সপোর্ট করুন:
export GEMINI_API_KEY=YOUR_GEMINI_API_KEY_FROM_STEP_2
এরপর .env ফাইলটি তৈরি করুন:
cat > backend/.env <<EOF
GEMINI_API_KEY=$GEMINI_API_KEY
GOOGLE_GENAI_USE_VERTEXAI=False
GOOGLE_CLOUD_PROJECT=$PROJECT_ID
EOF
সি. ফায়ারবেস অ্যাপ চেক / সার্ভিস অ্যাকাউন্ট সক্রিয় করুন (ক্লাউড রানের জন্য)
ক্লাউড রান-এ চলার সময়, ব্যাকএন্ড ফায়ারবেসের সাথে যোগাযোগের জন্য অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল ব্যবহার করে — কোনো সার্ভিস অ্যাকাউন্ট কী ফাইলের প্রয়োজন হয় না। backend/main.py তে থাকা firebase_admin.initialize_app() কলটি এটি স্বয়ংক্রিয়ভাবে গ্রহণ করে নেয়।
স্থানীয় উন্নয়নের জন্য, একবার প্রমাণীকরণ করুন:
gcloud auth application-default login
D. ফায়ারবেস অ্যাপ কনফিগারেশন ফাইল তৈরি করুন
frontend/ ডিরেক্টরিতে, পূর্ববর্তী ধাপের কনফিগারেশন দিয়ে firebase-applet-config.json ফাইলটি তৈরি করুন:
{
"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)"
}
দ্রষ্টব্য: firestoreDatabaseId অবশ্যই পূর্ববর্তী ধাপে আপনার তৈরি করা ডাটাবেস আইডির সাথে মিলতে হবে। আপনি যদি ডিফল্ট ব্যবহার করে থাকেন, তবে এটিকে "(default)" হিসাবে রেখে দিন।
আপনার রিপোজিটরিতে পরিবর্তনগুলো পুনরায় কমিট করুন:
git add frontend/firebase-applet-config.json
git commit -m "chore: add firebase config"
git push origin main
গ. ডাইনোকোয়েস্ট স্থানীয়ভাবে চালান
১. প্রয়োজনীয় এপিআইগুলো সক্রিয় করুন
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
২. ডাইনোকোয়েস্ট শুরু করুন
start.sh স্ক্রিপ্টটি React ফ্রন্টএন্ড বিল্ড করে এবং টার্মিনালটি FastAPI ব্যাকএন্ডের কাছে হস্তান্তর করে, যা কম্পাইল করা স্ট্যাটিক ফাইলগুলো পরিবেশন করে:
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
আপনার ব্রাউজারে http://localhost:8000 খুলুন। আপনি ডাইনোকোয়েস্ট টাইটেল স্ক্রিনটি দেখতে পাবেন। গুগল দিয়ে সাইন ইন করুন, আপনার প্রথম ডাইনোসরটি তৈরি করুন এবং নিশ্চিত করুন যে এটি ফায়ারস্টোরে সেভ হয়েছে।
সমস্যা সমাধান: যদি আপনি একটি ফাঁকা পৃষ্ঠা বা Firebase অথেন্টিকেশন ত্রুটি দেখতে পান, তাহলে পুনরায় যাচাই করুন যে frontend/firebase-applet-config.json সঠিক মান রয়েছে এবং localhost অনুমোদিত ডোমেনের তালিকায় আছে।
E. ক্লাউড রানে ডাইনোকোয়েস্ট স্থাপন করুন
১. আপনার প্রকল্প সেট করুন
export PROJECT_ID=$(gcloud config get-value project)
৩. একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করুন
gcloud artifacts repositories create dinoquest \
--repository-format=docker \
--location=$CLOUD_RUN_REGION \
--description="DinoQuest container images"
৪. জেমিনি এপিআই কী-টি সিক্রেট ম্যানেজারে সংরক্ষণ করুন।
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"
৫. ক্লাউড বিল্ড ব্যবহার করে কন্টেইনার ইমেজটি তৈরি করুন।
gcloud builds submit \
--tag $CLOUD_RUN_REGION-docker.pkg.dev/$PROJECT_ID/dinoquest/app:latest .
এটি বহু-পর্যায়ের ডকারফাইলটি চালায়: এটি প্রথমে রিয়্যাক্ট অ্যাপটি বিল্ড করে, তারপর আউটপুটটিকে ফাস্টএপিআই (FastAPI) ইমেজে প্যাকেজ করে। এতে প্রায় ৩-৫ মিনিট সময় লাগে।
৬. ক্লাউড রানে স্থাপন করুন
প্রথমে আপনার অ্যাডমিন ইমেলটি এক্সপোর্ট করুন:
export ADMIN_EMAIL=<YOUR_TEST_ACCOUNT_EMAIL>
তারপর সার্ভিসটি ডিপ্লয় করুন:
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"
কমান্ডটি সম্পন্ন হলে, ক্লাউড রান একটি সার্ভিস ইউআরএল (Service URL) প্রিন্ট করে। এই ইউআরএলটি কপি করে রাখুন — ফায়ারবেসে ডোমেইনটিকে অনুমোদন (authorize) করার জন্য এটি আপনার প্রয়োজন হবে।
৭. ফায়ারবেসে ক্লাউড রান ডোমেইনকে অনুমোদন দিন।
আপনার ডেপ্লয় করা অ্যাপ থেকে ব্যবহারকারীদের সাইন ইন করার অনুমতি দিতে, আপনাকে অবশ্যই ক্লাউড রান ইউআরএলটি ফায়ারবেসের অনুমোদিত ডোমেইনগুলিতে যোগ করতে হবে:
- Firebase কনসোলে ফিরে যান → প্রমাণীকরণ → সেটিংস → অনুমোদিত ডোমেইন
- ডোমেইন যোগ করুন ক্লিক করুন
- আপনার ক্লাউড রান পরিষেবার URL পেস্ট করুন (যেমন,
dinoquest-xxxxx.us-central1.run.app) —https://উপসর্গটি মুছে ফেলুন । - সংরক্ষণ করুন ক্লিক করুন
৮. লিডারবোর্ডের ডেটা সিড করুন
আপনার গেমকে শুরুতে কিছুটা প্রাণবন্ত করতে এবং আপনার এজেন্টদের কাছে ডেটা পৌঁছানো নিশ্চিত করতে, আপনি লিডারবোর্ডে কিছু প্রাথমিক স্কোর যুক্ত করতে পারেন।
- নিশ্চিত করুন যে আপনি
dinoquestরুট ডিরেক্টরিতে আছেন:cd ~/dinoquest - একটি ভার্চুয়াল পরিবেশ তৈরি ও সক্রিয় করুন:
python3 -m venv venv source venv/bin/activate - প্রয়োজনীয় ফায়ারস্টোর ডিপেন্ডেন্সি ইনস্টল করুন:
pip install google-cloud-firestore - সিডিং স্ক্রিপ্টটি চালান:
python3 prep/seed_scores.py - ভার্চুয়াল পরিবেশ নিষ্ক্রিয় করুন:
deactivate
এখন আপনি আপনার ব্রাউজারে সার্ভিস ইউআরএলটি খুলতে পারেন — ডাইনোকোয়েস্ট এখন পুরোপুরি চালু!
৪. ডাইনো থিয়েটার স্থাপন করুন
এজেন্টের ভূমিকা: ভিজ্যুয়ালাইজার । আপনি একটি স্বায়ত্তশাসিত এজেন্ট দলকে কীভাবে মনিটর করবেন? ডাইনো থিয়েটার আপনার এজেন্ট সোয়ার্মের মনের গভীরে উঁকি দেওয়ার একটি রিয়েল-টাইম সুযোগ করে দেয়। টার্মিনাল লগের দিকে তাকিয়ে থাকার পরিবর্তে, আপনি একটি লাইভ, ভিজ্যুয়াল ড্যাশবোর্ডে দেখতে পারেন কীভাবে আপনার এজেন্টরা যুক্তি দিয়ে চিন্তা করে, একে অপরকে কল করে এবং ক্লাউড জুড়ে বিভিন্ন কাজ সম্পাদন করে।

এ. ডাইনো থিয়েটারকে ক্লাউড রানে স্থাপন করুন
প্রথমে, আপনার হোম ডিরেক্টরিতে ফিরে যান এবং ডাইনো থিয়েটার কোডটি ক্লোন করুন:
cd ~
git clone https://github.com/gca-americas/dinoquest-theater.git
cd dinoquest-theater
- কন্টেইনারটি তৈরি করুন এবং পুশ করুন:
gcloud builds submit --tag $CLOUD_RUN_REGION-docker.pkg.dev/$PROJECT_ID/dinoquest/dino-theater:latest . - সার্ভিস অ্যাকাউন্ট ও অনুমতিসমূহ সেট আপ করুন:
# 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" - অ্যাপ্লিকেশনটি স্থাপন করুন:
দ্রষ্টব্য: ইভেন্টগুলোর মধ্যবর্তী সময়ে SSE সংযোগটি সচল রাখতে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=1ব্যবহার করার পরামর্শ দেওয়া হয়। - এটি কাজ করছে কিনা যাচাই করুন: আপনার ব্রাউজারে ডেপ্লয় করা সার্ভিস URL-টি খুলুন (যেমন,
https://dino-theater-xxx-uc.a.run.app/demo)।
৫. IDE-তে এজেন্টিক ডেভঅপ্স
এজেন্ট রোল: নেটিভ অ্যান্টিগ্র্যাভিটি । আপনার IDE এবং ক্লাউডের মধ্যে ব্যবধান ঘোচাতে, আমরা অ্যান্টিগ্র্যাভিটিকে গুগল ক্লাউডের ম্যানেজড MCP সার্ভারের সাথে সংযুক্ত করি। এটি আপনার নেটিভ এজেন্টকে আপনার প্রোজেক্টের উপর নজর রাখার সুযোগ দেয়, যার ফলে আপনাকে API কী নিয়ে নাড়াচাড়া করতে বা কনসোলে না গিয়েই এটি লগ পার্স করতে, মেট্রিক্স পরীক্ষা করতে এবং ইনফ্রাস্ট্রাকচার সম্পর্কে ধারণা পেতে পারে।
যেকোনো স্কিল চালানোর আগে, আপনাকে গুগল ক্লাউডে অ্যান্টিগ্র্যাভিটির অ্যাক্সেস কনফিগার করতে হবে এবং ডাইনোকোয়েস্ট স্কিল প্লেবুকগুলো লোড করতে হবে।
এ. গুগলের ম্যানেজড এমসিপি পরিষেবা ইনস্টল করুন।
গুগলের ম্যানেজড এমসিপি পরিষেবা একটিমাত্র হোস্টেড এন্ডপয়েন্টের মাধ্যমে সমস্ত গুগল ক্লাউড এপিআই-তে অ্যাক্সেস প্রদান করে।
অ্যাপ্লিকেশনের ডিফল্ট ক্রেডেনশিয়াল ব্যবহার করে প্রমাণীকরণ করুন:
gcloud auth application-default login
B. mcp_config.json কনফিগার করুন।
আপনার Antigravity কনফিগারেশন ডিরেক্টরিতে (সাধারণত ~/.gemini/antigravity/mcp_config.json ) অথবা কনসোল থেকে mcp_config.json তৈরি বা আপডেট করুন। এটি Antigravity-কে Google Cloud এবং GitHub টুলগুলিতে অ্যাক্সেস দেয় যার জন্য প্রয়োজনীয় দক্ষতা:
{
"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"
}
}
}
গ. অ্যান্টিগ্র্যাভিটিতে দক্ষতাগুলো লোড করুন (ঐচ্ছিক)
অ্যান্টিগ্র্যাভিটি নির্দিষ্ট স্ট্যান্ডার্ড ডিরেক্টরিতে স্কিলগুলো খুঁজে বের করে। আপনার ক্লোন করা রিপোজিটরি থেকে ডাইনোকোয়েস্ট স্কিলগুলো গ্লোবাল অ্যান্টিগ্র্যাভিটি স্কিলস ফোল্ডারে কপি করুন:
# 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. অ্যান্টিগ্র্যাভিটি পুনরায় চালু করুন (ঐচ্ছিক)
mcp_config.json এর পরিবর্তনগুলো প্রয়োগ করতে এবং নতুন কপি করা স্কিলগুলো লোড করতে, Antigravity অ্যাপ্লিকেশনটি পুনরায় চালু করুন ।
পুনরায় চালু করার পর:
- সেটিংসে গুগল এবং গিটহাব এমসিপি সার্ভারগুলোর স্ট্যাটাস সবুজ 'কানেক্টেড' দেখাচ্ছে কিনা তা যাচাই করুন।
- আপনার দক্ষতার তালিকায় DinoQuest দক্ষতাগুলো দেখা যাচ্ছে কিনা তা যাচাই করুন।
দ্রষ্টব্য: প্রতিটি স্কিলের SKILL.md ফাইলের শীর্ষে একটি ## Configuration টেবিল থাকে। কপি করার পর, আপনাকে ~/.gemini/antigravity/skills/ ফোল্ডারের মানগুলো আপডেট করতে হবে। ~/.gemini/antigravity/skills/ আপনার প্রোজেক্টের সাথে মেলানোর জন্য ~/.gemini/antigravity/skills/ ব্যবহার করুন।
ই. স্থানীয় IDE-তে ক্লাউড পরিষেবার ত্রুটি সংশোধন করুন।
- ত্রুটিটি ঘটান : আপনার ব্রাউজারে গত ধাপ থেকে ডেপ্লয় করা DinoQuest URL-টি খুলুন।
- লিডারবোর্ডে যান : লিডারবোর্ড বোতামে ক্লিক করুন। বর্তমান লিডারবোর্ড ব্যবস্থাটি ইচ্ছাকৃতভাবে অদক্ষ—এটি মেমরিতে বিপুল পরিমাণ ডেটা লোড করার চেষ্টা করবে, যার ফলে একটি আউট-অফ-মেমরি (OOM) ত্রুটি দেখা দেবে।
- অ্যান্টিগ্র্যাভিটি এজেন্ট ম্যানেজার (এজেন্ট হাব)-এ, ত্রুটিটি পুনরুদ্ধার করতে এবং সম্ভবত এর মূল কারণটি সমাধান করতে সাহায্য করার জন্য এটিকে অনুরোধ করুন।
- নির্দেশ ১: ডাইনোকোয়েস্টের সমস্যাটি খুঁজে বের করুন।
- নির্দেশ ২: আপনি কি ডাইনোকোয়েস্ট গেমটির কোডটি দেখে মেমোরি শেষ হয়ে যাওয়ার ত্রুটিটি ঠিক করতে পারবেন?
৬. BigQuery-তে লগ স্ট্রিম করুন এবং অ্যানালিটিক্স তৈরি করুন
এজেন্টের ভূমিকা: ডেটা এজেন্ট । কাঁচা লগগুলোকে কার্যকর প্রোডাক্ট স্ট্র্যাটেজিতে রূপান্তর করতে ঘণ্টার পর ঘণ্টা ধরে ম্যানুয়ালি ডেটা বিশ্লেষণ করার প্রয়োজন নেই। ডেটা এজেন্ট কিট এবং BigQuery MCP ব্যবহার করে, আমরা একটি 'জিরো ETL' পাইপলাইন তৈরি করি যা সরাসরি BigQuery-তে লগ স্ট্রিম করে, ফলে এজেন্ট দুই মিনিটেরও কম সময়ে একটি প্রিমিয়াম অ্যানালিটিক্স ড্যাশবোর্ড তৈরি করতে পারে।
log-router-bq-report স্কিলটি একটি ক্লাউড লগিং সিঙ্ক সেট আপ করে, যা ক্রমাগত ডাইনোকোয়েস্টের ক্লাউড রান লগগুলোকে বিগকোয়েরিতে স্ট্রিম করে এবং তারপর সেই ডেটা কোয়েরি করে ট্র্যাফিক রিপোর্ট ও গেম-অ্যানালিটিক্স সংক্রান্ত তথ্য তৈরি করে।

ক. দক্ষতার ভেরিয়েবলগুলো কনফিগার করুন।
আপনার DinoQuest রেপোতে থাকা skills/log-router-bq-report/SKILL.md খুলুন এবং উপরের Configuration সেকশনটি আপডেট করুন:
| Variable | Your Value |
|---------------|--------------------|
| SERVICE_NAME | dinoquest |
| BQ_DATASET | dinoquest_logs |
| LOG_SINK_NAME | dinoquest-bq-sink |
খ. অ্যান্টিগ্র্যাভিটিতে স্কিলটি চালান।
DinoQuest রিপোকে কনটেক্সট হিসেবে ব্যবহার করে অ্যান্টিগ্র্যাভিটি খুলুন এবং জেমিনিকে বলুন:
Run the log-router-bq-report skill
দক্ষতাটি করবে:
- আপনার GCP প্রজেক্ট স্বয়ংক্রিয়ভাবে সমাধান করুন
- BigQuery সিঙ্কটি আগে থেকেই বিদ্যমান আছে কিনা তা পরীক্ষা করুন — না থাকলে, এটি ডেটাসেট এবং সিঙ্ক তৈরি করবে।
- IAM অনুমতি প্রদান করুন : এটি সিঙ্কের
writerIdentityডেটাসেটের উপর BigQuery Data Editor ভূমিকা প্রদান করবে।
দ্রষ্টব্য: Eventarc সিঙ্কের মতোই, এই প্রক্রিয়া চলাকালীন আপনি gcloud থেকে একটি সতর্কবার্তা দেখতে পারেন: "অনুগ্রহ করে ডেটাসেটের উপর serviceAccount:service-...-কে BigQuery Data Editor রোলটি প্রদান করতে মনে রাখবেন।" স্কিলটি এটি স্বয়ংক্রিয়ভাবে পরিচালনা করে।
গ. প্রতিবেদন তৈরি করতে অ্যান্টিগ্র্যাভিটি ব্যবহার করা
শুধু Antigravity-কে 'BigQuery লগ সিঙ্ক সেট আপ করতে এবং অ্যানালিটিক্স রিপোর্ট তৈরি করতে' বলুন। এজেন্টটি যা করবে:
- পরিকাঠামো কনফিগার করুন : BigQuery ডেটাসেট এবং ক্লাউড লগিং সিঙ্ক তৈরি করুন।
- অনুমতি ব্যবস্থাপনা : সিঙ্কের রাইটার আইডেন্টিটিকে স্বয়ংক্রিয়ভাবে প্রয়োজনীয় IAM রোলগুলো প্রদান করুন।
- অন্তর্দৃষ্টি তৈরি করুন : লগগুলি বিশ্লেষণ করুন এবং গেম টেলিমেট্রি ও জয়ের হারের বিশ্লেষণ সহ একটি প্রিমিয়াম, ইন্টারেক্টিভ এইচটিএমএল ড্যাশবোর্ড তৈরি করুন।
৭. স্ব-আরোগ্যকারী প্রতিকারকারী উপাদান
এজেন্টের ভূমিকা: SRE এজেন্ট । যখন রাত ২টোর সময় কোনো প্রোডাকশন সার্ভিস বিকল হয়ে যায়, তখন আপনার ঘুম থেকে ওঠার প্রয়োজন নেই। এই এজেন্টটি আপনার প্রথম সাড়াদানকারী হিসেবে কাজ করে। Eventarc-এর মাধ্যমে Cloud Run-এর এরর লগ দ্বারা সক্রিয় হয়ে, এটি স্বয়ংক্রিয়ভাবে ক্র্যাশটি বিশ্লেষণ করে, একটি সমাধানের প্রস্তাব দেয় এবং একটি প্রতিকারমূলক পাইপলাইন চালু করে—এই সবকিছু আপনি কনসোলে লগ ইন করার আগেই সম্পন্ন হয়।
DinoAgent হলো একটি ADK এজেন্ট যা Eventarc-এর মাধ্যমে Cloud Run-এর এরর লগ শোনে, মূল কারণ নির্ণয় করে এবং স্বয়ংক্রিয়ভাবে তার প্রতিকার করে — যেমন মেমরি বাড়িয়ে, ট্র্যাফিক রোলব্যাক করে, অথবা GitHub-এ একটি কোড-ফিক্স PR ফাইল করে।

A. প্রতিকার এজেন্ট রিপোজিটরি ক্লোন করুন
cd ~
git clone https://github.com/gca-americas/dinoquest-reme-agent.git
cd dinoquest-reme-agent
প্রকল্পের কাঠামো:
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
খ. গিটহাব অ্যাক্সেস (কোড-ফিক্স ট্র্যাক) সেট আপ করুন।
কোড-ফিক্স ট্র্যাকটি আপনার ডাইনোকোয়েস্ট রিপো ক্লোন করে, সোর্স ফাইলগুলো পড়ে, প্যাচ প্রয়োগ করে এবং পিআর (PR) খোলে। এর জন্য repo স্কোপসহ একটি গিটহাব পার্সোনাল অ্যাক্সেস টোকেন প্রয়োজন।
- github.com/settings/tokens- এ যান → নতুন টোকেন তৈরি করুন (ক্লাসিক)
- এটির একটি নাম দিন,
repoস্কোপ নির্বাচন করুন → টোকেন তৈরি করুন → এটি কপি করুন
এটি সিক্রেট ম্যানেজারে সংরক্ষণ করুন:
প্রথমে, আপনার গিটহাব টোকেনটি এক্সপোর্ট করুন:
export GH_TOKEN=ghp_YOUR_TOKEN_HERE
তারপর গোপনীয়তা তৈরি করুন:
echo -n $GH_TOKEN | \
gcloud secrets create github-token --data-file=-
গ. স্ল্যাক নোটিফিকেশন সেট আপ করুন (ঐচ্ছিক)
যখন কোনো প্রতিকার সম্পন্ন হয়, ডাইনোএজেন্ট একটি স্ল্যাক চ্যানেলে তার সারসংক্ষেপ পোস্ট করে।
- api.slack.com/apps- এ যান → নতুন অ্যাপ তৈরি করুন → শুরু থেকে
- এর নাম দিন
DinoAgent, আপনার ওয়ার্কস্পেস নির্বাচন করুন → অ্যাপ তৈরি করুন - ফিচারস → ইনকামিং ওয়েবহুকস → টগল অন করুন
- ওয়ার্কস্পেসে নতুন ওয়েবহুক যোগ করুন -এ ক্লিক করুন → একটি চ্যানেল বেছে নিন → অনুমতি দিন
- ওয়েবহুক ইউআরএলটি (
https://hooks.slack.com/services/...) কপি করুন।
এটি সিক্রেট ম্যানেজারে সংরক্ষণ করুন:
export SLACK_TOKEN=YOUR_SLACK_WEBHOOK
echo -n "https://hooks.slack.com/services/$SLACK_TOKEN" | \
gcloud secrets create slack-webhook --data-file=-
D. ডাইনোএজেন্ট পরিষেবা অ্যাকাউন্ট তৈরি করুন
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
একে গোপনীয় তথ্যগুলিতে প্রবেশাধিকার দিন:
for SECRET in github-token slack-webhook; do
gcloud secrets add-iam-policy-binding $SECRET \
--member="serviceAccount:${SA}" \
--role="roles/secretmanager.secretAccessor"
done
ই. ক্লাউড রানে ডাইনোএজেন্ট তৈরি এবং স্থাপন করুন
# 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. ইভেন্টার্ক ট্রিগারটি ওয়্যার আপ করুন।
ক্লাউড রান এরর লগ পেতে একটি পাব/সাব টপিক তৈরি করুন:
gcloud pubsub topics create cloud-run-errors
একটি ক্লাউড লগিং সিঙ্ক তৈরি করুন যা আপনার dinoquest পরিষেবা থেকে ত্রুটির লগগুলি ফিল্টার করে এবং সেগুলিকে এই টপিকে পাঠিয়ে দেয়:
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"
দ্রষ্টব্য: আপনি যখন উপরের কমান্ডটি চালাবেন, gcloud একটি তথ্য বার্তা প্রিন্ট করবে যেখানে বলা থাকবে: "অনুগ্রহ করে মনে রাখবেন, টপিকটির উপর serviceAccount:service-...-কে পাব/সাব পাবলিশার রোলটি প্রদান করতে হবে।" পরবর্তী ধাপে ঠিক এই কাজটিই করা হয়।
সিঙ্কের লেখক পরিচয়কে (সতর্কবার্তায় উল্লিখিত পরিষেবা অ্যাকাউন্ট) প্রকাশ করার অনুমতি দিন:
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"
এটি সক্রিয় আছে কিনা যাচাই করুন:
gcloud eventarc triggers describe remediation-trigger --location=$CLOUD_RUN_REGION
প্রতিকার এজেন্ট চালু করার জন্য Eventarc-কে অনুমতি দিন:
gcloud run services add-iam-policy-binding remediation-agent \
--region=$CLOUD_RUN_REGION \
--member="serviceAccount:${SA}" \
--role="roles/run.invoker"
ইভেন্টআর্ক ট্রিগার তৈরি করুন:
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}
প্রতিকার প্রক্রিয়াটি এখন সম্পূর্ণ স্বয়ংক্রিয়। শুধু পরিকাঠামো স্কেল করার বাইরেও, ডাইনোএজেন্ট অ্যাপ্লিকেশন কোডের উপর একটি গভীর মূল-কারণ বিশ্লেষণ করে, একটি সিম্যান্টিক প্যাচ প্রয়োগ করে এবং যাচাই ও ডেপ্লয়মেন্টের জন্য সিআই এজেন্টের কাছে সমাধানটি হস্তান্তর করতে এজেন্ট-টু-এজেন্ট (A2A) যোগাযোগ ব্যবহার করে। আপনি reme-agent কোডবেসে এর বাস্তবায়নের বিস্তারিত বিবরণ দেখতে পারেন।
৮. সিআই এজেন্ট সেট আপ করুন
এজেন্টের ভূমিকা: CI পাইপলাইন । জটিল YAML ফাইল এবং ম্যানুয়াল বিল্ড স্ক্রিপ্ট নিয়ে আর মাথা ঘামাতে হবে না। এই এজেন্ট আপনার PR-গুলোর কার্যপ্রণালীর মূল কাঠামো পরিচালনা করে। এটি আপনার কোডের পরিবর্তনগুলো পড়ে, প্রেক্ষাপট বোঝে, প্রয়োজনীয় টেস্টগুলোর পরিধি নির্ধারণ করে এবং ক্লাউড বিল্ডের মাধ্যমে আপনার ডকার ইমেজ তৈরি করে, যা নিশ্চিত করে যে প্রতিটি কমিট মূল ব্রাঞ্চে পৌঁছানোর আগে "এজেন্ট-অনুমোদিত" হয়।
ci-agent হলো একটি স্বায়ত্তশাসিত সিআই পাইপলাইন এজেন্ট, যা ক্লাউড রান পরিষেবা হিসেবে স্থাপন করা হয়েছে। এটি ক্লাউড বিল্ড-এ ডকার বিল্ড জমা দেয়, কাজ সম্পন্ন হয়েছে কিনা তা যাচাই করে, আর্টিফ্যাক্ট রেজিস্ট্রি-তে ইমেজটি যাচাই করে এবং গিটহাব-এ রিপোর্ট পাঠায়।

আপনার CI পাইপলাইনের জন্য এজেন্ট কেন ব্যবহার করবেন? প্রচলিত স্ট্যাটিক স্ক্রিপ্টের বিপরীতে, একটি এজেন্টিক CI পাইপলাইন নিম্নলিখিত সুবিধাগুলো প্রদান করে:
- জ্ঞানীয় পরিধি শ্রেণীকরণ : এটি আপনার কোডের পরিবর্তনের অর্থগত প্রভাবের উপর ভিত্তি করে বুদ্ধিমত্তার সাথে প্রয়োজনীয় পরীক্ষার গভীরতা নির্ধারণ করে—যেমন টাইপ-চেক, ইউনিট টেস্ট বা সম্পূর্ণ ইন্টিগ্রেশন স্যুটের মধ্যে পরিবর্তন করা।
- স্বয়ংক্রিয় পিআর ব্যবস্থাপনা : এজেন্টটি মানুষের হস্তক্ষেপ ছাড়াই স্বয়ংক্রিয়ভাবে পিআর তৈরি করতে, পরিবর্তনের বিস্তারিত সারসংক্ষেপ পোস্ট করতে এবং এমনকি সিক্রেট স্ক্যানিং ও নিরাপত্তা নিরীক্ষা পরিচালনা করতে পারে।
- রিয়েল-টাইম ব্যর্থতা নির্ণয় : যখন কোনো বিল্ড ব্যর্থ হয়, তখন এজেন্ট শুধু লগই দেখায় না; এটি স্ট্যাক ট্রেস বিশ্লেষণ করে, সম্ভাব্য কারণ শনাক্ত করে এবং সরাসরি PR-এ একটি পাঠযোগ্য নির্ণয় প্রতিবেদন পোস্ট করে।
A. CIAgent রিপোজিটরি ক্লোন করুন
cd ~
git clone https://github.com/gca-americas/dinoquest-ci-agent.git
cd dinoquest-ci-agent
খ. 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"
গ. গিটহাব রিপোকে ক্লাউড বিল্ডের সাথে সংযুক্ত করুন
CIAgent, repoSource মাধ্যমে বিল্ড জমা দেয়, যার জন্য GitHub রিপোটিকে Cloud Build Developer Connect-এর সাথে সংযুক্ত থাকতে হয়।
- GCP কনসোল → ক্লাউড বিল্ড → রিপোজিটরি- তে যান
- রিপোজিটরি সংযোগ করতে ক্লিক করুন
- গিটহাব নির্বাচন করুন (ক্লাউড বিল্ড গিটহাব অ্যাপ)
- আপনার
YOUR_GITHUB_USERNAME/dinoquestরিপোজিটরি অনুমোদন করুন এবং নির্বাচন করুন। - ট্রিগার তৈরি করতে বলা হলে, কানেক্ট-এ ক্লিক করুন এবং স্কিপ করুন ।
- আপনার কানেকশন নামটি লিখে রাখুন (ডিফল্ট হিসেবে সাধারণত আপনার গিটহাব ইউজারনেম বা অনুরূপ কিছু থাকে)।
ডি. সিআইএ এজেন্টকে গোপনীয় তথ্যে প্রবেশাধিকার দিন।
আমরা ডাইনোএজেন্টের জন্য পূর্বে তৈরি করা গোপনীয় তথ্যগুলো পুনরায় ব্যবহার করব:
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"
ই. ক্লাউড রানে CIAgent তৈরি ও স্থাপন করুন
# 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
এফ. স্ল্যাক স্ল্যাশ কমান্ড সেটআপ
- api.slack.com/apps- এ যান → নতুন অ্যাপ তৈরি করুন → শুরু থেকে
- এর নাম দিন
CIAgent, আপনার ওয়ার্কস্পেস বেছে নিন → অ্যাপ তৈরি করুন - ফিচারস → স্ল্যাশ কমান্ডস → নতুন কমান্ড তৈরি করুন- এর অধীনে
- কমান্ড:
/runci - অনুরোধ URL: উপরে দেওয়া আপনার CIAgent Cloud Run URL-এর শেষে
/slackযুক্ত করুন (যেমনhttps://ci-agent-xxx-.us-central1.run.app/slack) - সংক্ষিপ্ত বিবরণ:
Trigger CI - সংরক্ষণ করুন
- সেটিংস → অ্যাপ ইনস্টল- এর অধীনে, ওয়ার্কস্পেসে ইনস্টল করুন-এ ক্লিক করুন এবং অনুমতি দিন।
সিআই এজেন্ট ক্লাউড বিল্ড এবং আর্টিফ্যাক্ট রেজিস্ট্রির মতো শক্তিশালী গুগল ক্লাউড পরিষেবাগুলোর ওপর অবস্থিত একটি 'মস্তিষ্ক' হিসেবে কাজ করে। বিল্ডটি যাচাই হয়ে গেলে, এটি A2A- এর মাধ্যমে সিডি এজেন্টকে কল করে চূড়ান্ত ডেপ্লয়মেন্ট পর্বটি শুরু করে, যা বিল্ড এবং রিলিজ চক্রের মধ্যে একটি নির্বিঘ্ন হস্তান্তর নিশ্চিত করে।
৯. ডেপ্লয়মেন্ট সেট আপ করুন
এজেন্টের ভূমিকা: সিডি এজেন্ট । ডেপ্লয়মেন্ট কোনো অন্ধ বিশ্বাসের বিষয় হওয়া উচিত নয়। এই এজেন্ট আপনার জন্য ঝুঁকি পরিচালনা করে। এটি ডেপ্লয়মেন্টের নিরাপত্তা মূল্যায়ন করে, ক্যানারি ট্র্যাফিক স্প্লিট পরিচালনা করে এবং কোনো রিলিজকে প্রমোট করা হবে নাকি রোলব্যাক করা হবে, সেই সিদ্ধান্ত নিতে রিয়েল-টাইম মেট্রিক্স পর্যবেক্ষণ করে। এটি আপনার স্বয়ংক্রিয় এজেন্ট সোয়ার্মের চূড়ান্ত দ্বাররক্ষক।
cd-agent হলো একটি স্বায়ত্তশাসিত ক্যানারি ডেপ্লয়মেন্ট এজেন্ট, যা ক্লাউড রান সার্ভিস হিসেবে ডেপ্লয় করা হয়। এটি ci-agent থেকে এ২এ ডেপ্লয় রিকোয়েস্ট গ্রহণ করে, একটি রিস্ক স্কোর গণনা করে, একটি রিস্ক-ক্যালিব্রেটেড ক্যানারি পার্সেন্টেজ নির্ধারণ করে, মেট্রিক্স মনিটর করে এবং স্বয়ংক্রিয়ভাবে প্রমোট বা রোল ব্যাক করে। এটি ফায়ারস্টোর ব্যবহার করে পূর্ববর্তী ডেপ্লয়মেন্টগুলো থেকেও শেখে।

এজেন্টদের সরাসরি সংযুক্ত করা একটি 'জ্ঞানীয় পাইপলাইন' তৈরি করে, যেখানে প্রতিটি হস্তান্তর অভিপ্রায় ও প্রেক্ষাপটের একটি সমৃদ্ধ স্থানান্তর। প্রচলিত ওয়েবহুকের বিপরীতে, A2A যোগাযোগ নিম্নলিখিত বিষয়গুলোর সুযোগ দেয়:
- বুদ্ধিদীপ্ত প্রেক্ষাপট আদান-প্রদান : এজেন্টরা সম্পূর্ণ সেশন মেমরি, পিআর ডিফস এবং রিস্ক স্কোর আদান-প্রদান করে, যা নিশ্চিত করে যে পরবর্তী এজেন্ট কাজ শুরু করার আগে এর পেছনের সম্পূর্ণ কারণটি জানতে পারে।
- কগনিটিভ হ্যান্ডশেক : এজেন্টরা গেট নিয়ে আলোচনা করতে পারে। উদাহরণস্বরূপ, একটি ক্যানারি রোলআউটের সময় সিডি এজেন্ট রিয়েল-টাইমে কোনো সমাধান যাচাই করার জন্য সিআই এজেন্টের কাছে নির্দিষ্ট স্মোক টেস্টের অনুরোধ করতে পারে।
- সম্মিলিত প্রতিকার : যদি কোনো ডেপ্লয়মেন্ট ব্যর্থ হয়, তাহলে সিডি এজেন্ট সক্রিয়ভাবে ব্যর্থ মেট্রিক্স সহ প্রতিকার এজেন্টকে অবহিত করতে পারে, যার ফলে কোনো মানুষকে ডাকার আগেই একটি স্বায়ত্তশাসিত মূল-কারণ বিশ্লেষণ শুরু হয়ে যায়।
- রিসোর্স নেগোসিয়েশন : এজেন্টরা অবকাঠামোগত চাহিদা নিয়ে আলোচনা করতে পারে। উদাহরণস্বরূপ, সিআই এজেন্ট যদি একটি বড় আকারের রিফ্যাক্টর শনাক্ত করে, তবে এটি রেমিডিয়েশন এজেন্টকে আরও বিল্ড ক্যাপাসিটি সরবরাহ করতে বলতে পারে, অথবা সিডি এজেন্ট একটি মেজর রিলিজের আগে প্রোডাকশন ক্লাস্টার স্কেল করার পরামর্শ দিতে পারে।
- মাল্টি-এজেন্ট কনসেনসাস : উচ্চ-ঝুঁকিপূর্ণ পরিবর্তনের ক্ষেত্রে, একাধিক এজেন্ট (যেমন, সিকিউরিটি এজেন্ট এবং সিডি এজেন্ট) A2A-এর মাধ্যমে একটি "যৌথ অনুমোদন" সম্পাদন করতে পারে। এটি নিশ্চিত করে যে কোডটি কেবল বিল্ড এবং ডেপ্লয়ই হয় না, বরং প্রোডাকশনে যাওয়ার আগে নিরাপত্তা নীতিগুলোও মেনে চলে।
A. CDAgent রিপোজিটরি ক্লোন করুন
cd ~
git clone https://github.com/gca-americas/dinoquest-cd-agent.git
cd dinoquest-cd-agent
খ. ফায়ারস্টোর ডেটাবেস তৈরি করুন
CDAgent তার ডেপ্লয়মেন্ট মেমরি প্যাটার্নগুলো ফায়ারস্টোরে সংরক্ষণ করে:
gcloud firestore databases create \
--region=$CLOUD_RUN_REGION \
--project=$PROJECT_ID
(আপনি যদি এই প্রজেক্টে আগে থেকেই একটি ডাটাবেস তৈরি করে থাকেন, তাহলে এই ধাপটি বাদ দিতে পারেন।)
গ. 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. CDAgent-কে গোপনীয় তথ্যে প্রবেশাধিকার দিন।
আমরা আগের GitHub টোকেন এবং Slack ওয়েবহুক পুনরায় ব্যবহার করব, এবং Cloud Run কম্পিউট সার্ভিস অ্যাকাউন্টকে Gemini API Key-তে অ্যাক্সেস দেব যাতে ডেপ্লয় করা অ্যাপটি এটি ব্যবহার করতে পারে:
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"
ই. ক্লাউড রানে CDAgent তৈরি ও স্থাপন করুন
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
দ্রষ্টব্য: --min-instances=1 --no-cpu-throttling ইনস্ট্যান্সটিকে সক্রিয় রাখে, যাতে এটি স্ল্যাক এবং A2A কমান্ডগুলিতে দ্রুত সাড়া দিতে পারে।
সিডি এজেন্ট হলো আপনার প্রোডাকশন এনভায়রনমেন্টের চূড়ান্ত রক্ষক। এটি প্রতিটি ডেপ্লয়মেন্টের ঝুঁকি মূল্যায়ন করে, একটি ঝুঁকি-সমন্বিত ক্যানারি সম্পাদন করে এবং রিয়েল-টাইম মেট্রিক্স পর্যবেক্ষণ করে। যদি কোনো অস্বাভাবিকতা শনাক্ত হয়, তবে এটি একটি স্বয়ংক্রিয় রোলব্যাক শুরু করে।
১০. পরিধি বৃদ্ধি: এজেন্ট সোয়ার্মের মাধ্যমে লেভেল ২ আনলক করা
ক. সম্পূর্ণ ঝাঁক পরীক্ষা করুন
- ত্রুটিটি ঘটান : আপনার ব্রাউজারে গত ধাপ থেকে ডেপ্লয় করা DinoQuest URL-টি খুলুন।
- লিডারবোর্ডে যান : লিডারবোর্ড বোতামে ক্লিক করুন। বর্তমান লিডারবোর্ড ব্যবস্থাটি ইচ্ছাকৃতভাবে অদক্ষ—এটি মেমরিতে বিপুল পরিমাণ ডেটা লোড করার চেষ্টা করবে, যার ফলে একটি আউট-অফ-মেমরি (OOM) ত্রুটি দেখা দেবে।
- এজেন্টের জন্য অপেক্ষা করুন : প্রায় ৬০ সেকেন্ডের মধ্যে,
remediation-agentইভেন্টআর্কের মাধ্যমে ত্রুটির ইভেন্টটি গ্রহণ করবে এবং এর ডায়াগনোসিস শুরু করবে। - স্ল্যাক দেখুন : আপনার স্ল্যাক চ্যানেলে এইরকম একটি নোটিফিকেশন দেখতে পাবেন: DinoAgent Remediation Summary
- পরিষেবা : ডাইনোকোয়েস্ট
- ব্যর্থ সংশোধন : dinoquest-xxxx-xxxx
- প্রমাণ : "১২৮ MiB মেমোরি সীমা অতিক্রম করা হয়েছে, ১৩ গুণ MiB ব্যবহৃত হয়েছে।"
- এই সংস্করণটি কেন খারাপ ছিল :
/api/leaderboardএন্ডপয়েন্টটি অদক্ষভাবে ব্যবহৃত হওয়ায় একটি OOM ত্রুটি দেখা দেয়। - গৃহীত পদক্ষেপ :
dinoquestসার্ভিসের মেমরি xMi থেকে yGi-তে বৃদ্ধি করা হয়েছে। একটি নতুন রিভিশন তৈরি করা হয়েছে। - মূল কারণের পিআর : https://github.com/YOUR_USERNAME/DinoQuest/pull/x
- সংশোধনগুলি যাচাই করুন :
- গিটহাব : নতুন ব্রাঞ্চ এবং পুল রিকোয়েস্টের জন্য আপনার রিপোজিটরি দেখুন। এজেন্টটি অন্তর্নিহিত মেমরি লিক ঠিক করার জন্য অ্যাপ্লিকেশন কোডটি প্যাচ করেছে।
- ক্লাউড রান : GCP কনসোলে, আপনি আপডেট করা মেমরি বরাদ্দ সহ
dinoquestপরিষেবার একটি নতুন সংস্করণ দেখতে পাবেন। - লিডারবোর্ড : লিডারবোর্ডটি আবার চেষ্টা করুন—মেমরি বৃদ্ধি এবং কোডের চূড়ান্ত সমাধানের ফলে এটি এখন সফলভাবে লোড হওয়া উচিত।
খ. বিবর্তন: লেভেল ২ গেম লজিক বাস্তবায়ন
আপনি একটি গুরুত্বপূর্ণ নতুন বৈশিষ্ট্য যোগ করবেন: লেভেল ২ (অ্যাস্টেরয়েড ডেস্ট্রয়ার) । এর মাধ্যমে উচ্চ স্কোরধারী ডাইনোসরগুলো একটি নতুন গেম মোডে অগ্রসর হতে পারবে।
- আপনার ডাইনোকোয়েস্ট রিপোজিটরিতে ফিরে যান :
cd ~/dinoquest - নতুন শাখা তৈরি করুন এবং তাতে যান :
git checkout -b level_2 - লেভেল ২ প্যাচ প্রয়োগ করুন : লেভেল ২ অ্যাসেট, কম্পোনেন্ট এবং গেম লজিক দিয়ে আপনার লোকাল কোডবেস প্যাচ করতে প্রদত্ত স্ক্রিপ্টটি চালান:
bash level_2_backup/levelup.sh - পরিবর্তনগুলো কমিট এবং পুশ করুন :
git add . git commit -m "feat: add Level 2" git push origin level_2
এজেন্টকে ম্যানুয়ালি চালু করার জন্য curl ব্যবহার করার পরিবর্তে, আমরা আপনার আগে কনফিগার করা Slack Slash Command ব্যবহার করব। বাস্তব পরিস্থিতিতে এভাবেই আপনি আপনার স্বয়ংক্রিয় CI পাইপলাইনের সাথে কাজ করেন।
- স্ল্যাক খুলুন এবং এমন যেকোনো চ্যানেলে যান যেখানে
CIAgentঅ্যাপটি ইনস্টল করা আছে। - নিম্নলিখিত কমান্ডটি টাইপ করে CI বিল্ডটি চালু করুন :
/runci run ci on branch level_2 - অগ্রগতি পর্যবেক্ষণ করুন :
- স্ল্যাক : এজেন্ট আপনার কমান্ডের প্রাপ্তি স্বীকার করবে এবং বিল্ডের অগ্রগতির সাথে সাথে আপডেট পোস্ট করবে।
- ডাইনো থিয়েটার : এজেন্ট যখন পরিবর্তনটিকে শ্রেণীবদ্ধ করে, ক্লাউড বিল্ড জব জমা দেয় এবং সিডি এজেন্টের সাথে যোগাযোগ করে, তখন তার 'চিন্তার বুদবুদগুলো' দেখুন।
- GitHub : আপনার
level_2PR চেক করুন; আপনি দেখবেন এজেন্টটি কমিট স্ট্যাটাস এবং একটি সম্পূর্ণ CI রিপোর্ট কমেন্ট পোস্ট করছে।
- প্রক্রিয়াটি দেখুন :
- সিআই এজেন্ট কীভাবে চিন্তা করছে, পরিবর্তনকে শ্রেণীবদ্ধ করছে এবং পাইপলাইনটি চালাচ্ছে, তা দেখতে ডিনো থিয়েটার দেখুন।
- সিআই এজেন্ট কর্তৃক কমিট স্ট্যাটাস এবং চূড়ান্ত রিপোর্ট পোস্ট করা দেখতে আপনার গিটহাব পিআর (PR) চেক করুন।
১১. উপসংহার
আপনি গুগল ক্লাউডে একটি সম্পূর্ণ এজেন্টিক ডেভঅপ্স স্ট্যাক তৈরি করেছেন:
উপাদান | এটা যা করে |
ডাইনোকোয়েস্ট (ক্লাউড রান | জেমিনি-চালিত গেম — রিয়্যাক্ট ফ্রন্টএন্ড + ফাস্টএপিআই ব্যাকএন্ড |
ফায়ারবেস অথেন্টিকেশন + ফায়ারস্টোর | ব্যবহারকারীর প্রমাণীকরণ এবং ডাইনোসর প্রোফাইল সংরক্ষণ |
প্রতিকার এজেন্ট (ক্লাউড রান + ইভেন্টার্ক) | SRE এজেন্ট যা স্বয়ংক্রিয়ভাবে OOM ত্রুটি এবং কোড বাগ সংশোধন করে |
লগ-রাউটার-বিকিউ-রিপোর্ট | ডেটা এজেন্ট যা BigQuery-তে লগ স্ট্রিম করে এবং ইনসাইট তৈরি করে। |
সিআইএজেন্ট (ক্লাউড রান) | CI এজেন্ট যা টেস্টের পরিধি নির্ধারণ করে, ইমেজ তৈরি করে এবং A2A-এর মাধ্যমে CD-কে কল করে। |
সিডিএজেন্ট (ক্লাউড রান) | সিডি এজেন্ট যা অটো-রোলব্যাক সহ রিস্ক-স্কোর করা ক্যানারি ডিপ্লয়মেন্ট চালায়। |
এজেন্টের সমস্ত আচরণ skills/ ডিরেক্টরিতে মার্কডাউন প্লেবুক হিসেবে থাকে — আচরণ পরিবর্তন করতে কোড নয়, স্কিলটি সম্পাদনা করুন। স্কিলগুলো 'Antigravity with Gemini'- তে চলে এবং এজেন্টকে কোন স্কিলটি চালাতে হবে তা বলে দিয়ে এগুলোকে সক্রিয় করা হয়।