Pipeline CI/CD CloudLab menggunakan GitHub Actions untuk otomasi build, test, dan deployment aplikasi.
Memvalidasi konfigurasi sebelum build:
- Konfigurasi Docker Compose
- Konfigurasi Nginx
Build semua aplikasi menggunakan strategi matriks untuk skalabilitas:
strategy:
matrix:
app:
- name: nodejs-app
image: cloudlab-nodejs-app
context: ./apps/demo-apps/nodejs-app
port: 3001
health_endpoint: /health
metrics_endpoint: /metrics
sleep_time: 5
- name: python-app
image: cloudlab-python-app
context: ./apps/demo-apps/python-app
port: 5000
health_endpoint: /api/health
metrics_endpoint: /metrics
sleep_time: 10
fail-fast: falseKeuntungan Strategi Matriks:
- Scalable: Mudah menambah aplikasi baru
- DRY (Don't Repeat Yourself): Tidak ada duplikasi kode
- Parallel: Semua aplikasi di-build secara paralel
- Maintainable: Satu template untuk semua aplikasi
Scan kerentanan menggunakan Trivy untuk semua aplikasi.
Uji integrasi lengkap meliputi:
- Nginx reverse proxy
- Aplikasi Node.js melalui Nginx
- Python API melalui Nginx
- Metrics Prometheus
- Grafana dashboard
- Target Prometheus
Deployment ke produksi (saat ini dinonaktifkan, aktifkan saat siap deploy).
Untuk menambah aplikasi baru, cukup tambahkan entri di matriks build-apps:
build-apps:
strategy:
matrix:
app:
- name: nodejs-app
# ... existing config ...
- name: python-app
# ... existing config ...
# Tambahkan aplikasi baru di sini:
- name: golang-app
image: cloudlab-golang-app
context: ./apps/demo-apps/golang-app
port: 8080
health_endpoint: /health
metrics_endpoint: /metrics
sleep_time: 5Tidak perlu:
- Duplikasi job baru
- Copy-paste langkah-langkah
- Update di banyak tempat
Cukup:
- Tambah 1 entri di matriks
- Semua langkah otomatis diterapkan
Pipeline berjalan otomatis pada:
- Push ke branch
mainataudevelop - Pull request ke branch
main
env:
REGISTRY: ghcr.io
NODE_APP_IMAGE: cloudlab-nodejs-app
PYTHON_APP_IMAGE: cloudlab-python-appSetiap aplikasi memiliki cakupan cache terpisah untuk optimasi waktu build:
cache-from: type=gha,scope=${{ matrix.app.name }}
cache-to: type=gha,mode=max,scope=${{ matrix.app.name }}Setiap aplikasi diuji dengan:
- Endpoint pemeriksaan kesehatan (Health check)
- Endpoint metrics
- Uji integrasi melalui Nginx
- Fail-fast: false - Lanjutkan build aplikasi lain meskipun satu gagal
- Scoped cache - Cache terpisah per aplikasi untuk efisiensi
- Penamaan Dinamis - Gunakan
${{ matrix.app.name }}untuk penamaan - Struktur Konsisten - Semua aplikasi harus memiliki endpoint health & metrics
Karena fail-fast: false, aplikasi lain tetap di-build. Periksa logs untuk aplikasi yang gagal.
Hapus cache dengan menjalankan ulang workflow atau membersihkan cache GitHub Actions.
Sesuaikan sleep_time di konfigurasi matriks jika aplikasi membutuhkan waktu startup lebih lama.