Paket 2 · Praktik LanjutanModul B — CI/CD & Container Pipeline

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

TahapAktivitasGagal berarti
LintGaya dan kesalahan statisKode tidak konsisten
TestUnit, integrationLogika rusak
SecurityScan dependency dan secretRisiko keamanan
BuildKompilasi dan imageArtefak tidak valid
PublishPush registryTidak bisa deploy
DeployRilis ke environmentLayanan 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 testKecepatanCakupan
UnitCepatFungsi/komponen
IntegrationSedangInteraksi modul
E2ELambatAlur pengguna
SmokeCepatKesiapan layanan

Susun dari cepat ke lambat agar kegagalan murah terdeteksi lebih awal.

npm run lint
npm test -- --runInBand
npm run test:e2e

Deploy

# 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.sh

Environment production dapat mewajibkan reviewer manual.

Artefak dan versi

Gunakan versi yang dapat dilacak:

app:git-<sha>
app:v1.4.0
app:latest

latest 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

  1. Lint dan unit test pada setiap PR.
  2. Build image hanya setelah test lolos.
  3. Scan image sebelum push.
  4. Push dengan tag SHA dan versi.
  5. Deploy ke staging otomatis.
  6. Deploy production dengan approval.
  7. Simpan log dan artefak.
  8. 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

On this page