Episode ini membahas CI/CD dan deployment produksi: Continuous Integration dan Continuous Delivery dengan GitHub Actions, build dan release management dengan semantic versioning, deployment ke server dan Kubernetes, serta strategi rollback dan blue-green deployment.

Kode yang hanya ada di laptop tidak bernilai — ia bernilai saat berjalan di produksi. Episode 21 membahas CI/CD dan deployment produksi: Continuous Integration dan Continuous Delivery dengan GitHub Actions, release management, deployment ke server dan Kubernetes, serta strategi rollback yang aman.
Otomasi build, test, dan deployment membuat rilis cepat, konsisten, dan dapat diulang. Kalian akan membangun pipeline yang mengantar kode dari commit menuju produksi dengan percaya diri.
CI adalah praktik mengintegrasikan perubahan kode secara terus-menerus ke branch utama, dengan build dan test otomatis di setiap push. Tujuannya: mendeteksi konflik dan regresi lebih awal.
CD memperpanjang CI dengan memastikan artefak selalu siap dirilis — deployment ke produksi tinggal satu langkah. Continuous Deployment mengotomasi langkah itu sepenuhnya. Perbedaan kunci: CD menjaga "deployable state", CI hanya menjaga "testable state".
GitHub Actions adalah platform CI/CD terintegrasi. Workflow didefinisikan dalam YAML:
name: Java CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'
- name: Build dengan Maven
run: mvn clean verifyactions/setup-java@v4 memasang JDK 21 Temurin, dan mvn clean verify menjalankan seluruh build serta test.
Semantic versioning memakai format MAJOR.MINOR.PATCH: MAJOR untuk perubahan yang tidak kompatibel, MINOR untuk fitur baru yang kompatibel, PATCH untuk perbaikan bug. Versi ini menjadi komunikasi eksplisit tentang dampak perubahan.
Otomasi pembuatan tag versi dan release notes dengan tool seperti semantic-release atau JReleaser di dalam pipeline:
- name: Release
run: npx semantic-release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}Deploy jar ke server dengan systemd atau container runtime. Salin artefak dan mulai ulang layanan:
scp target/aplikasi.jar user@server:/opt/aplikasi/
ssh user@server "sudo systemctl restart aplikasi"Kubernetes mengorkestrasi container. Definisi deployment dalam YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: aplikasi-demo
spec:
replicas: 3
selector:
matchLabels:
app: aplikasi-demo
template:
metadata:
labels:
app: aplikasi-demo
spec:
containers:
- name: aplikasi
image: ghcr.io/aplikasi/aplikasi-demo:1.0.0
ports:
- containerPort: 8080Terapkan deployment:
kubectl apply -f deployment.yaml
kubectl get podskubectl apply -f deployment.yaml membuat atau memperbarui resource, dan kubectl get pods memeriksa statusnya.
Rollback mengembalikan aplikasi ke versi sebelumnya saat deployment bermasalah. Di Kubernetes, rollout bisa di-undo:
kubectl rollout undo deployment/aplikasi-demokubectl rollout undo mengembalikan deployment ke revisi sebelumnya dengan cepat.
Blue-green menjalankan dua environment: blue (saat ini) dan green (versi baru). Saat green siap dan teruji, trafik dialihkan dari blue ke green. Rollback tinggal memindah trafik kembali — tanpa downtime.
Canary mengalihkan sebagian kecil trafik ke versi baru, memantau metrik, lalu memperluasnya bertahap. Ini meminimalkan risiko perubahan besar dan memberi waktu untuk mendeteksi masalah dini.
Episode 21 membahas CI/CD dan deployment produksi: CI dan CD dengan GitHub Actions, build dan release management dengan semantic versioning, deployment ke server dan Kubernetes, serta strategi rollback, blue-green, dan canary deployment.
Inti yang harus dibawa pulang:
Di episode 22 selanjutnya kita akan membahas monitoring, observability, dan production support — metrik JVM dan pengumpulan metrik dengan Micrometer, log management dan structured logging, distributed tracing dengan OpenTelemetry dan Grafana, health check dan readiness probe, serta incident response dan SLO. Saatnya menjaga layanan tetap sehat!