Pipeline trigger berdasarkan branch prefix: feature ke lint & unit test, develop ke integration test, main ke full test & staging, hotfix ke production path, serta environment deployment strategy dengan canary dan blue-green deployment via branching.

Setelah di episode 16 kita mempelajari Branch Protection & Rulesets — bagaimana mengamankan branch utama — pada episode ini kita membahas bagaimana CI/CD pipeline terintegrasi dengan branching strategy. Pipeline yang berbeda untuk branch yang berbeda mengoptimalkan waktu dan resource.
Tidak semua branch membutuhkan test suite yang sama: feature branch cukup lint + unit test, sementara main membutuhkan full test + staging deployment.
feature/*)on:
push:
branches: ['feature/**']
jobs:
lint:
runs-on: ubuntu-latest
steps: [npm run lint]
unit-test:
runs-on: ubuntu-latest
steps: [npm test -- --unit]Cukup lint dan unit test — cepat dan murah. Feedback untuk developer dalam hitungan menit.
on:
push:
branches: ['develop']
jobs:
integration-test:
runs-on: ubuntu-latest
steps: [npm test -- --integration]
e2e-test:
runs-on: ubuntu-latest
steps: [npm run test:e2e]Integration test dan E2E test berjalan — lebih lama tetapi memastikan kode stabil.
on:
push:
branches: ['main', 'release/**']
jobs:
full-test:
runs-on: ubuntu-latest
steps: [npm test]
build:
runs-on: ubuntu-latest
steps: [npm run build]
deploy-staging:
needs: [full-test, build]
steps: [./deploy.sh staging]Full test suite + build + deploy ke staging. Production deploy membutuhkan approval manual.
hotfix/*)on:
push:
branches: ['hotfix/**']
jobs:
full-test:
runs-on: ubuntu-latest
steps: [npm test]
deploy-production:
needs: [full-test]
steps: [./deploy.sh production]Hotfix melewati staging → langsung ke production (setelah approval).
| Branch | Target Environment | Approval |
|---|---|---|
feature/* | Dev / Preview | Tidak perlu |
develop | Development | Tidak perlu |
main | Staging | Tidak perlu |
main + tag | Production | Manual approval |
hotfix/* | Production | Manual approval |
Production deploy selalu membutuhkan approval manual. Ini bisa dikonfigurasi di GitHub Actions:
deploy-production:
needs: [deploy-staging]
environment:
name: production
runs-on: ubuntu-latest
steps:
- run: ./deploy.sh productionGitHub akan menampilkan tombol "Approve" yang harus diklik sebelum deploy berjalan.
Deploy ke sebagian kecil user terlebih dahulu:
Canary deployment menggunakan branch atau tag untuk menandai versi canary.
Dua environment identik — blue (production saat ini) dan green (versi baru):
# Deploy ke green
./deploy.sh green
# Switch traffic dari blue ke green
./switch-traffic.sh green
# Rollback jika ada masalah
./switch-traffic.sh blueBranch blue dan green bisa digunakan untuk menandai versi di setiap environment.
Note
Canary dan blue-green deployment adalah advanced patterns yang membutuhkan infrastructure yang sesuai (load balancer, container orchestration). Untuk deployment sederhana, cukup gunakan staging + approval gate.
Pada episode 17 ini, kalian telah memahami CI/CD Integration:
Di episode 18 selanjutnya kita akan mempelajari Monorepo Branching Strategy — tantangan branch yang sama mempengaruhi banyak package, path-based filtering di CI, dan CODEOWNERS per package. Sampai jumpa di episode 18!