CI/CD Sat Set GCP: Otomatisasi Deployment dengan Cloud Build
Yo, ngab! Pernah ngerasa repot banget nge-deploy aplikasi mulu? Tiap ada update dikit, eh disuruh push ke server satu-satu. Bikin pusing tujuh keliling, kan? Nah, kali ini gue mau spill rahasia biar deployment bisa sat set sat set, alias otomatis pakai Google Cloud Platform (GCP) dengan Cloud Build. Siap-siap aja, abis ini vibes nge-deploy jadi makin asik!
Apa Sih CI/CD Itu? Kenapa Penting?
Sebelum kita nyelam ke Cloud Build, kita ngertiin dulu konsep dasarnya: CI/CD.
- CI (Continuous Integration): Ini tuh semacam kebiasaan nge-merge kode yang udah kamu tulis ke main branch (biasanya
mainataumaster) secara rutin, minimal sekali sehari. Tujuannya biar konflik kode (kalo banyak yang nulis barengan) cepet ketauan dan bisa langsung diatasi. Jadi nggak numpuk jadi drama panjang. - CD (Continuous Delivery/Deployment): Nah, kalo ini level selanjutnya.
- Continuous Delivery: Versi yang lebih santai. Kodenya siap di-deploy kapan aja, tapi keputusan buat beneran di-deploy itu masih di tangan manusia (biasanya lewat button click).
- Continuous Deployment: Ini versi all-in. Tiap kali ada kode yang lolos semua tes di CI/CD pipeline, langsung otomatis di-deploy ke production without human intervention. Keren banget, kan?
Kenapa ini penting banget?
- Cepet Ngeluarin Fitur Baru: Developer bisa fokus ngoding, sisanya biar otomatis.
- Kurangin Human Error: Proses otomatis lebih konsisten daripada dikerjain manual.
- Deteksi Bug Lebih Awal: Masalah ketauan pas awal-awal, nggak pas udah di tangan user.
- Deploy Lebih Sering: Frekuensi deploy bisa makin tinggi, bikin update makin cepet dirasain user.
Cloud Build: Si Otomatis GCP yang Kekinian
Nah, GCP punya jagoan buat ngurusin CI/CD ini, namanya Cloud Build. Ini tuh layanan fully managed yang bisa nge-build, tes, dan nge-deploy kode kamu di GCP. Yang paling keren, Cloud Build itu bisa di-trigger otomatis pas kamu nge-push kode ke repo Git (kayak GitHub, Bitbucket, GitLab).
Gimana cara kerjanya? Simpel:
- Trigger: Kamu atur trigger di Cloud Build yang bakal nyala pas ada event tertentu di repo Git kamu (misal: push ke branch
main, bikin pull request). - Build Steps: Di dalam trigger itu, kamu kasih tau Cloud Build mau ngapain aja. Ini biasanya ditulis dalam file
cloudbuild.yaml. Kamu bisa ngasih instruksi kayak:- Pull kode dari repo.
- Install dependencies.
- Run unit tests.
- Build Docker image.
- Push Docker image ke Artifact Registry (atau Container Registry).
- Deploy ke GCP services (Cloud Run, GKE, App Engine, dll).
- Execution: Cloud Build bakal ngejalanin semua steps itu di lingkungan yang udah disediain sama GCP. Hasilnya bisa langsung kamu liat di dashboard Cloud Build.
Tutorial Singkat: CI/CD Sederhana ke Cloud Run
Oke, biar makin jelas, kita spill contoh praktisnya ya. Kita mau bikin pipeline CI/CD super simpel yang nge-deploy aplikasi web ke Cloud Run setiap kali ada push ke branch main di GitHub.
Prasyarat:
- Akun GCP dengan billing aktif.
- Project GCP.
- Aplikasi web sederhana (misal: pake Node.js, Python, Go) yang bisa di-Dockerize.
- Repository GitHub.
Langkah 1: Siapin Aplikasi & Dockerfile
Misal, kita punya aplikasi Node.js sederhana di folder my-app:
// index.js
const express = require('express');
const app = express();
const port = process.env.PORT || 8080;
app.get('/', (req, res) => {
res.send('Halo dari Cloud Run CI/CD!');
});
app.listen(port, () => {
console.log(`Aplikasi jalan di port ${port}`);
});
Terus, bikin Dockerfile di root folder aplikasi kamu:
# Gunakan base image Node.js
FROM node:18-slim
# Set working directory di dalam container
WORKDIR /app
# Copy package.json dan package-lock.json
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy seluruh kode aplikasi ke working directory
COPY . .
# Expose port yang akan digunakan
EXPOSE 8080
# Perintah untuk menjalankan aplikasi saat container start
CMD ["node", "index.js"]
Langkah 2: Push ke GitHub & Bikin Cloud Build Trigger
- Push kode aplikasi dan
Dockerfilekamu ke repository GitHub. - Buka GCP Console, cari Cloud Build.
- Pilih Triggers di menu kiri.
- Klik Create trigger.
- Konfigurasi trigger-nya:
- Name:
github-deploy-to-cloudrun(atau nama lain yang gampang diinget) - Region:
global(atau region yang kamu mau) - Event:
Push to a branch - Repository: Pilih repository GitHub kamu.
- Branch:
^main$(Ini regex buat mencocokkan branchmainsecara eksak) - Build Configuration: Pilih
Cloud Build configuration file (yaml or json). - Location:
Repository(karena filenya ada di repo kita). - Cloud Build configuration file location:
/cloudbuild.yaml(Kita bakal bikin file ini nanti).
- Name:
- Klik Create.
Langkah 3: Bikin File cloudbuild.yaml
Di root folder aplikasi kamu (sama tempat Dockerfile), bikin file namanya cloudbuild.yaml:
# cloudbuild.yaml
steps:
# Step 1: Build Docker image
- name: 'gcr.io/cloud-builders/docker'
args:
[
'build',
'-t',
'asia-southeast1-docker.pkg.dev/$PROJECT_ID/my-repo/my-app:$COMMIT_SHA',
'.',
]
id: 'Build Docker Image'
# Step 2: Push Docker image ke Artifact Registry
- name: 'gcr.io/cloud-builders/docker'
args:
[
'push',
'asia-southeast1-docker.pkg.dev/$PROJECT_ID/my-repo/my-app:$COMMIT_SHA',
]
id: 'Push Docker Image'
waitFor: ['Build Docker Image'] # Pastikan step ini jalan setelah step 1 selesai
# Step 3: Deploy ke Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
args:
[
'run',
'deploy',
'my-cloud-run-service', # Nama service Cloud Run kamu
'--image',
'asia-southeast1-docker.pkg.dev/$PROJECT_ID/my-repo/my-app:$COMMIT_SHA',
'--region',
'asia-southeast1', # Ganti dengan region Cloud Run kamu
'--platform',
'managed', # Atau 'gke' kalo mau deploy ke GKE
'--allow-unauthenticated', # Biar service bisa diakses publik tanpa login
'--quiet', # Untuk menekan prompt konfirmasi
]
id: 'Deploy to Cloud Run'
waitFor: ['Push Docker Image'] # Pastikan step ini jalan setelah step 2 selesai
images:
- 'asia-southeast1-docker.pkg.dev/$PROJECT_ID/my-repo/my-app:$COMMIT_SHA' # Ini untuk registry image
Penjelasan cloudbuild.yaml:
steps: Ini daftar instruksi yang bakal dijalani Cloud Build secara berurutan.name: Menentukan builder (tool/image) yang bakal dipake buat ngejalanin step ini.gcr.io/cloud-builders/docker: Builder bawaan buat ngejalanin perintah Docker.gcr.io/google.com/cloudsdktool/cloud-sdk: Builder yang udah ada gcloud CLI-nya, penting buat interaksi sama GCP services kayak Cloud Run.
args: Argumen yang dikasih ke builder.- Di step 1, kita nge-build Docker image. Tag-nya pake
$PROJECT_ID(ID project GCP kamu) dan$COMMIT_SHA(hash commit dari Git, biar unik tiap deploy). asia-southeast1-docker.pkg.dev/$PROJECT_ID/my-repo/my-app: Ini adalah format repository di Artifact Registry. Kamu WAJIB bikin Artifact Registry repository dengan namamy-repo(atau nama lain) di regionasia-southeast1(atau region yang kamu pilih) dulu sebelum trigger ini jalan pertama kali.- Di step 3, kita deploy ke Cloud Run.
my-cloud-run-serviceitu nama service Cloud Run yang bakal dibuat/di-update.
- Di step 1, kita nge-build Docker image. Tag-nya pake
id: ID unik buat tiap step. Berguna buatwaitFor.waitFor: Menentukan step mana aja yang harus selesai duluan sebelum step ini dijalankan. Ini penting buat ngejaga urutan.images: Daftar image Docker yang mau di-push ke registry setelah build selesai.
Penting:
- Artifact Registry: Sebelum trigger jalan, kamu harus bikin Artifact Registry dulu. Di GCP Console, cari Artifact Registry, klik Create repository. Pilih region yang sama dengan yang kamu pake di
cloudbuild.yaml(misal:asia-southeast1), kasih namamy-repo(atau yang sesuai dicloudbuild.yaml), dan formatnyaDocker. - Permissions: Pastikan akun service default Cloud Build (
[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com) punya izin (IAM roles) yang cukup buat nge-build image, push ke Artifact Registry, dan deploy ke Cloud Run. Biasanya, roleCloud Build Service Accountudah cukup, tapi kalo ada error, cek lagi permissionnya. - Otomatisasi: Cloud Build bakal otomatis grant izin yang dibutuhkan Cloud Build Service Account ke Artifact Registry dan Cloud Run kalo kamu pake builder bawaan GCP.
Langkah 4: Tes Otomatisasi!
Sekarang, coba kamu push lagi kode ke branch main di GitHub kamu (misal: ubah teks "Halo dari Cloud Run CI/CD!" jadi "Deploy Otomatis Mantap!").
Pergi ke Cloud Build di GCP Console, klik History. Kamu bakal liat build baru muncul dan statusnya jalan. Tunggu sampe selesai. Kalo semua lancar, kamu bisa buka URL service Cloud Run kamu, dan liat teksnya udah ke-update! Yeay! 🎉
Tips & Tricks Biar Makin GG
- Multiple Environments: Kamu bisa bikin trigger dan config
cloudbuild.yamlyang beda buat staging dan production. Misal, trigger buat staging pake push ke branchdevelop, trus trigger buat production pake merge kemain. - Testing Lanjutan: Selain unit test, kamu bisa tambahin step buat integration test atau end-to-end test di
cloudbuild.yaml. - Notifications: Atur notifikasi (via Slack, email) biar kamu tau kalo build sukses atau gagal. Ada di bagian Notifications di menu Cloud Build.
- Variable & Secrets: Gunakan substitutions di Cloud Build buat nge-handle variabel, dan Cloud Secret Manager buat nyimpen secrets (API keys, password) biar aman.
- Cache: Biar build lebih cepet, kamu bisa manfaatin caching dependency di Dockerfile atau di step Cloud Build.
Penutup
Gimana, gaes? Nggak seseram yang dibayangin, kan? Dengan Cloud Build, nge-deploy aplikasi jadi jauh lebih efisien dan minim drama. Kamu bisa fokus bikin fitur keren, sementara Cloud Build yang nge-gas deploy-nya. Ini baru permulaan, masih banyak lagi yang bisa dieksplor di Cloud Build buat bikin pipeline CI/CD kamu makin canggih. Happy coding & deploying!
Berikan Rating
Komentar (0)
Silakan login untuk memberikan komentar.
Login SekarangKata Kunci
Pembaca (1)
Belum ada komentar. Jadilah yang pertama!