Uji Lima Asisten
Panduan ini dipakai bersama oleh lima asisten yang memakai satu project GCP yang sama. Setiap asisten menguji VM miliknya sendiri dengan email yang sudah di-assign, dan pengujian tidak perlu dilakukan serentak. Langkah pembuatan project dan Identity and Access Management (IAM) mengikuti panduan akun master. Langkah deployment per asisten mengikuti panduan deployment asisten, sedangkan pencatatan bukti mengikuti workbook asisten trainer.
Runbook ini mengatur pembagian nama resource, urutan pengujian, dan pemeriksaan benturan. Perintah deployment lengkap tidak diulang di sini. Bagian yang paling penting untuk dibaca lebih dahulu adalah tabel pola nama pada bagian 2, karena tumbukan nama adalah penyebab kegagalan build yang paling sering terjadi saat lima orang memakai satu project.
1. Target pengujian
Section titled “1. Target pengujian”Project Kelompok A memakai konfigurasi berikut:
PROJECT_ID="geoportal-kelompok-a-xxxxx"REGION="asia-southeast2"ZONE="asia-southeast2-b"REPOSITORY="katalog-images"APP_DIR="/opt/webgis/app"Lima akun memakai slug yang sudah disepakati:
| Kode | Slug | |
|---|---|---|
| A01 | asisten01@example.com |
nama01 |
| A02 | asisten02@example.com |
nama02 |
| A03 | asisten03@example.com |
nama03 |
| A04 | asisten04@example.com |
nama04 |
| A05 | asisten05@example.com |
nama05 |
Slug harus memakai huruf kecil, angka, atau tanda hubung tanpa spasi. Satu slug hanya boleh dipakai oleh satu orang dalam project yang sama.
Slug maksimal 18 karakter. Nama Service Account ID dibatasi 30 karakter, sedangkan
prefix cb-deployer- memakai 12 karakter. Slug yang lebih panjang akan gagal saat Service
Account dibuat. Asisten boleh memilih nama pribadi selama batas itu dipatuhi, misalnya
dhanypedia atau yofita.
2. Resource bersama dan resource unik
Section titled “2. Resource bersama dan resource unik”Resource berikut dibuat satu kali oleh akun master dan dipakai bersama:
| Resource | Nama atau cakupan |
|---|---|
| API | Compute Engine, Cloud Build, Artifact Registry, IAP, Cloud DNS, Cloud Domains, dan Secret Manager |
| Jaringan | VPC default |
| Firewall HTTP dan HTTPS | allow-webgis-http |
| Firewall SSH melalui IAP | allow-webgis-iap-ssh |
| Network tag | webgis-http dan webgis-iap-ssh |
| Artifact Registry | katalog-images |
| Budget alert | Satu budget untuk Project Kelompok A |
Setiap akun wajib membedakan resource berikut:
| Resource | Pola nama | Contoh A01 |
|---|---|---|
| VM | webgis-SLUG |
webgis-nama01 |
| Service Account deployment | cb-deployer-SLUG |
cb-deployer-nama01 |
| GitHub connection | github-SLUG |
github-nama01 |
| Linked repository | repo-SLUG |
repo-nama01 |
| Cloud Build trigger | deploy-SLUG |
deploy-nama01 |
| Container image | katalog-images/nextjs-SLUG |
katalog-images/nextjs-nama01 |
| Static IP | webgis-ip-SLUG |
webgis-ip-nama01 |
| DNS zone | geoportal-SLUG |
geoportal-nama01 |
Batas panjang yang perlu diperhatikan: nama Service Account ID maksimal 30 karakter,
sedangkan cb-deployer-SLUG sudah memakai 12 karakter untuk prefix. Nama VM maksimal
63 karakter, jadi bagian itu jauh lebih longgar.
Tiga container pada setiap VM juga perlu memperoleh nama yang berbeda supaya
docker compose ps pada satu VM tidak tertukar dengan VM lain saat pemantauan bersama:
| Resource | Pola nama | Contoh A01 |
|---|---|---|
| Container Next.js | nextjs_portal |
nextjs_portal |
| Container GeoServer | geoserver_app |
geoserver_app |
| Container Nginx | nginx_proxy |
nginx_proxy |
| Folder data GeoServer | geoserver-data-SLUG |
geoserver-data-nama01 |
Container boleh memakai nama yang sama karena setiap asisten memakai VM yang berbeda. Folder data GeoServer tidak perlu berbeda selama folder tersebut berada di dalam VM masing-masing, tetapi menambahkan slug memudahkan pencarian saat menyalin berkas keluar VM. | Domain | Domain milik masing-masing akun | Domain A01 |
Path /opt/webgis/app dan nama project Docker Compose app boleh sama. Setiap akun
memakai VM yang berbeda sehingga filesystem dan container tidak saling bertabrakan.
3. Variabel unik setiap akun
Section titled “3. Variabel unik setiap akun”Setiap orang menjalankan blok berikut dari Cloud Shell miliknya. Ganti nilai
PARTICIPANT_ID sesuai tabel pada bagian 1.
PROJECT_ID="geoportal-kelompok-a-xxxxx"REGION="asia-southeast2"ZONE="asia-southeast2-b"PARTICIPANT_ID="nama01"
REPOSITORY="katalog-images"APP_DIR="/opt/webgis/app"VM_NAME="webgis-${PARTICIPANT_ID}"BUILD_SA_NAME="cb-deployer-${PARTICIPANT_ID}"CONNECTION_NAME="github-${PARTICIPANT_ID}"LINKED_REPO_NAME="repo-${PARTICIPANT_ID}"TRIGGER_NAME="deploy-${PARTICIPANT_ID}"IMAGE_NAME="nextjs-${PARTICIPANT_ID}"STATIC_IP_NAME="webgis-ip-${PARTICIPANT_ID}"DNS_ZONE_NAME="geoportal-${PARTICIPANT_ID}"
BUILD_SA="${BUILD_SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
gcloud config set project "$PROJECT_ID"gcloud auth listgcloud config get-value projectHasil gcloud auth list harus menunjukkan email yang benar. Hasil perintah terakhir harus
sama dengan PROJECT_ID.
4. Pre-check oleh akun master
Section titled “4. Pre-check oleh akun master”Jalankan pemeriksaan berikut sebelum lima akun mulai membuat resource:
gcloud config set project "$PROJECT_ID"
gcloud services list --enabled \ --format="value(config.name)"
gcloud artifacts repositories describe "$REPOSITORY" \ --location="$REGION"
gcloud compute firewall-rules list \ --filter="name:(allow-webgis-http OR allow-webgis-iap-ssh)"
gcloud compute instances listgcloud iam service-accounts listgcloud builds connections list --region="$REGION"gcloud builds triggers list --region="$REGION"Pemeriksaan ini memastikan resource bersama sudah tersedia dan nama dari percobaan lama tidak bertabrakan dengan slug baru. Hapus resource lama hanya setelah pemiliknya mengonfirmasi bahwa data tersebut tidak lagi diperlukan.
5. Urutan pengujian
Section titled “5. Urutan pengujian”Setiap asisten menguji satu email miliknya sendiri, satu per satu, tidak serentak. Jadi tidak ada yang perlu menunggu giliran, dan tidak ada build yang berjalan bersamaan. Cara ini membuat sumber error lebih mudah dilacak, karena setiap kegagalan bisa ditelusuri ke satu perubahan saja.
Urutan lengkap satu putaran pengujian, dari laptop sampai VM:
- Dari laptop. Fork repository, lengkapi lima berkas konfigurasi, verifikasi, commit, lalu push. Langkah ini wajib selesai sebelum Cloud Build dijalankan, karena build membaca berkas tersebut dari fork.
- Dari Cloud Shell. Buat Service Account deployment, VM, GitHub connection, linked repository, dan trigger dengan slug sendiri.
- Jalankan trigger sampai build hijau, lalu buka
/portal/. - Buka
/geoserver/web/dan unggah satu layer sebagai pembuktian tiga container. - Catat pengukuran memori pada spesifikasi default.
- Hentikan VM.
Setiap asisten mengulangi enam langkah itu dengan slugnya sendiri. A01 memakai nama01,
A02 memakai nama02, dan seterusnya sampai A05.
Panduan langkah demi langkah untuk keenam langkah di atas ada pada panduan deployment asisten, dan lembar pencatatannya ada pada workbook asisten trainer.
Catat hasil setiap akun:
| Kode | IAM | VM dan SSH | GitHub | Build | /portal/ |
GeoServer | Unggah layer | Stop VM |
|---|---|---|---|---|---|---|---|---|
| A01 | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| A02 | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| A03 | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| A04 | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| A05 | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
6. Periksa isolasi antaraccount
Section titled “6. Periksa isolasi antaraccount”Setelah kelima asisten menyelesaikan pengujiannya, pastikan tidak ada resource yang saling tertukar. Karena setiap asisten sudah melakukan push pada pengujiannya sendiri, pemeriksaan ini memakai riwayat build yang sudah ada, tanpa perlu menjalankan build tambahan.
Periksa seluruh trigger:
gcloud builds triggers list \ --region="$REGION" \ --format="table(name,repositoryEventConfig.repository,serviceAccount)"Periksa VM:
gcloud compute instances list \ --filter="name~'^webgis-'" \ --format="table(name,zone,status,networkInterfaces[0].accessConfigs[0].natIP)"Periksa image setiap akun:
for IMAGE_NAME in nextjs-nama01 nextjs-nama02 nextjs-nama03 nextjs-nama04 nextjs-nama05do echo "Image: $IMAGE_NAME" gcloud artifacts docker images list \ "$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME" \ --include-tags \ --limit=5donePush dari satu akun hanya boleh memperbarui image dan VM milik akun tersebut.
7. Kriteria pengujian berhasil
Section titled “7. Kriteria pengujian berhasil”Pengujian dinyatakan berhasil jika seluruh butir berikut terpenuhi. Setiap butir dibuktikan oleh asisten yang bersangkutan pada pengujiannya sendiri, lalu diperiksa bersama pada bagian ini.
- Lima akun dapat membuka Project Kelompok A melalui IAM.
- Lima VM tersedia dengan nama yang berbeda.
- Lima Service Account deployment tersedia dengan nama yang berbeda.
- Lima GitHub connection dan linked repository berstatus siap.
- Lima trigger memakai repository, Service Account, VM, dan image yang sesuai.
- Seluruh build pertama berstatus berhasil.
- Lima aplikasi dapat dibuka melalui path
/portal/tanpa redirect loop. - Lima antarmuka GeoServer dapat dibuka melalui path
/geoserver/web/. - Setiap asisten berhasil mengunggah minimal satu layer ke GeoServer miliknya.
- Push satu akun tidak mengubah image atau VM akun lain.
- Resource bersama tidak dibuat ulang oleh akun asisten.
- Seluruh VM dapat dihentikan tanpa mengganggu resource bersama.
Jika muncul error baru, catat gejala, penyebab, dan solusi pada
docs-md/troubleshooting.md, bagian 6b. Jangan membuat
berkas temuan baru supaya semua gejala terkumpul di satu tempat.
8. Hentikan VM setelah pengujian
Section titled “8. Hentikan VM setelah pengujian”Setiap akun menghentikan VM miliknya:
gcloud compute instances stop "$VM_NAME" \ --zone="$ZONE" \ --project="$PROJECT_ID"Akun master memeriksa hasil akhir:
gcloud compute instances list \ --filter="name~'^webgis-'" \ --format="table(name,status,zone)"Semua VM harus berstatus TERMINATED. Disk dan static IP tertentu masih dapat menimbulkan
biaya setelah VM berhenti, jadi Billing Reports tetap perlu diperiksa.