Lewati ke konten

Uji Lima Asisten

BersamaBelum diuji

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.

Project Kelompok A memakai konfigurasi berikut:

Cloud Shell akun master
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 Email 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.

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.

Setiap orang menjalankan blok berikut dari Cloud Shell miliknya. Ganti nilai PARTICIPANT_ID sesuai tabel pada bagian 1.

Cloud Shell akun master
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 list
gcloud config get-value project

Hasil gcloud auth list harus menunjukkan email yang benar. Hasil perintah terakhir harus sama dengan PROJECT_ID.

Jalankan pemeriksaan berikut sebelum lima akun mulai membuat resource:

Cloud Shell akun master
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 list
gcloud iam service-accounts list
gcloud 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.

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:

  1. 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.
  2. Dari Cloud Shell. Buat Service Account deployment, VM, GitHub connection, linked repository, dan trigger dengan slug sendiri.
  3. Jalankan trigger sampai build hijau, lalu buka /portal/.
  4. Buka /geoserver/web/ dan unggah satu layer sebagai pembuktian tiga container.
  5. Catat pengukuran memori pada spesifikasi default.
  6. 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

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:

Cloud Shell akun master
gcloud builds triggers list \
--region="$REGION" \
--format="table(name,repositoryEventConfig.repository,serviceAccount)"

Periksa VM:

Cloud Shell akun master
gcloud compute instances list \
--filter="name~'^webgis-'" \
--format="table(name,zone,status,networkInterfaces[0].accessConfigs[0].natIP)"

Periksa image setiap akun:

Cloud Shell akun master
for IMAGE_NAME in nextjs-nama01 nextjs-nama02 nextjs-nama03 nextjs-nama04 nextjs-nama05
do
echo "Image: $IMAGE_NAME"
gcloud artifacts docker images list \
"$REGION-docker.pkg.dev/$PROJECT_ID/$REPOSITORY/$IMAGE_NAME" \
--include-tags \
--limit=5
done

Push dari satu akun hanya boleh memperbarui image dan VM milik akun tersebut.

Pengujian dinyatakan berhasil jika seluruh butir berikut terpenuhi. Setiap butir dibuktikan oleh asisten yang bersangkutan pada pengujiannya sendiri, lalu diperiksa bersama pada bagian ini.

  1. Lima akun dapat membuka Project Kelompok A melalui IAM.
  2. Lima VM tersedia dengan nama yang berbeda.
  3. Lima Service Account deployment tersedia dengan nama yang berbeda.
  4. Lima GitHub connection dan linked repository berstatus siap.
  5. Lima trigger memakai repository, Service Account, VM, dan image yang sesuai.
  6. Seluruh build pertama berstatus berhasil.
  7. Lima aplikasi dapat dibuka melalui path /portal/ tanpa redirect loop.
  8. Lima antarmuka GeoServer dapat dibuka melalui path /geoserver/web/.
  9. Setiap asisten berhasil mengunggah minimal satu layer ke GeoServer miliknya.
  10. Push satu akun tidak mengubah image atau VM akun lain.
  11. Resource bersama tidak dibuat ulang oleh akun asisten.
  12. 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.

Setiap akun menghentikan VM miliknya:

Cloud Shell akun master
gcloud compute instances stop "$VM_NAME" \
--zone="$ZONE" \
--project="$PROJECT_ID"

Akun master memeriksa hasil akhir:

Cloud Shell akun master
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.