CI/CD Pipeline: Build, Test & Deploy
Merancang pipeline build, test, dan deploy yang cepat, aman, dan dapat diulang.
Pipeline CI/CD mengubah commit menjadi rilis. Pipeline yang baik memberi umpan balik cepat, menghentikan perubahan berbahaya, dan menghasilkan artefak yang dapat dilacak.
Tahapan pipeline
| Tahap | Aktivitas | Gagal berarti |
|---|---|---|
| Lint | Gaya dan kesalahan statis | Kode tidak konsisten |
| Test | Unit, integration | Logika rusak |
| Security | Scan dependency dan secret | Risiko keamanan |
| Build | Kompilasi dan image | Artefak tidak valid |
| Publish | Push registry | Tidak bisa deploy |
| Deploy | Rilis ke environment | Layanan gagal |
Prinsip desain
- Fast feedback — test cepat dijalankan lebih dulu.
- Fail fast — hentikan pipeline pada error pertama yang kritis.
- Idempotent — menjalankan ulang menghasilkan hasil sama.
- Reproducible — versi tool dan dependency dipin.
- Immutable artifact — build sekali, deploy ke banyak environment.
- Least privilege — token hanya seperlunya.
Build
npm ci
npm run build
tar -czf dist.tar.gz dist/Untuk container:
docker build -t ghcr.io/org/app:${GIT_SHA} .Build sekali. Jangan build ulang berbeda untuk staging dan production.
Test
| Jenis test | Kecepatan | Cakupan |
|---|---|---|
| Unit | Cepat | Fungsi/komponen |
| Integration | Sedang | Interaksi modul |
| E2E | Lambat | Alur pengguna |
| Smoke | Cepat | Kesiapan layanan |
Susun dari cepat ke lambat agar kegagalan murah terdeteksi lebih awal.
npm run lint
npm test -- --runInBand
npm run test:e2eDeploy
# contoh deploy via SSH
ssh deploy@app.example.com '
cd /srv/app &&
docker compose pull &&
docker compose up -d
'Deploy harus memakai artefak yang sudah diuji, bukan kode acak dari branch lokal.
Contoh GitHub Actions
name: CI/CD
on:
push:
branches: [main]
pull_request:
permissions:
contents: read
packages: write
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci
- run: npm run lint
- run: npm test
build:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: docker build -t app:${{ github.sha }} .Environment dan approval
deploy:
needs: build
runs-on: ubuntu-latest
environment: production
steps:
- run: ./deploy.shEnvironment production dapat mewajibkan reviewer manual.
Artefak dan versi
Gunakan versi yang dapat dilacak:
app:git-<sha>
app:v1.4.0
app:latestlatest boleh untuk kenyamanan, tetapi deployment produksi sebaiknya memakai tag versi atau SHA.
Caching
- uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}Cache menghemat waktu, tetapi jangan meng-cache rahasia atau data yang tidak valid.
Praktik: pipeline minimum produksi
- Lint dan unit test pada setiap PR.
- Build image hanya setelah test lolos.
- Scan image sebelum push.
- Push dengan tag SHA dan versi.
- Deploy ke staging otomatis.
- Deploy production dengan approval.
- Simpan log dan artefak.
- Sediakan rollback.
Ringkasan
- Pipeline yang baik cepat, reproducible, dan memakai artefak immutable.
- Build sekali, deploy ke beberapa environment.
- Test disusun dari cepat ke lambat.
- Deploy produksi membutuhkan gate dan rollback.
Selanjutnya
Perdalam pipeline di GitHub Actions & GitLab CI/CD Advanced.