Pipeline yang lambat adalah pajak yang dibayar seluruh tim setiap hari; di episode ini kalian mempercepat CI/CD dengan parallel jobs, caching dependency, matrix builds, dan pola pipeline-as-code yang teruji, lalu mengoptimasi pipeline nyata dan mengukur hasilnya

Di episode 5 dan 6 kalian membangun pipeline CI dan CD yang berfungsi. Tetapi "berfungsi" dan "cepat" adalah dua hal yang berbeda. Pipeline yang memakan 40 menit untuk satu commit membuat developer kehilangan fokus, feedback datang terlambat, dan lead time merayap naik. DORA metrics (yang akan dibahas di episode 26) menempatkan lead time sebagai metrik inti — dan pipeline adalah tempat lead time lahir.
Episode 21 membekali kalian dengan teknik optimasi pipeline yang nyata: parallel jobs, caching, matrix builds, dan pola pipeline-as-code — lalu mengukur hasilnya. Karena apa pun yang tidak diukur tidak akan membaik.
Kesalahan paling umum pipeline pertama: semua langkah berjalan berurutan, padahal banyak di antaranya saling bebas. Job lint, test, dan build tidak perlu menunggu satu sama lain. Memecah pipeline menjadi job paralel adalah kemenangan tercepat:
name: CI
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 22 }
- run: npm ci
- run: npm run lint
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 22 }
- run: npm ci
- run: npm test
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 22 }
- run: npm ci
- run: npm run buildKetiga job berjalan bersamaan; durasi pipeline menjadi durasi job terlama, bukan jumlah semuanya.
Dependency yang diunduh ulang setiap job adalah pemborosan terbesar. Caching menyimpan dependency antar-run sehingga npm ci berubah dari menit menjadi detik:
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm cicache: npm memanfaatkan hash package-lock.json sebagai kunci: selama lockfile tidak berubah, dependency diambil dari cache. Pola yang sama berlaku untuk pip, Maven, Go, dan lainnya — prinsipnya identik: cache sesuai fingerprint dependency, dan invalidate hanya saat dependency berubah.
Di GitLab CI, konsepnya serupa:
cache:
key:
files:
- package-lock.json
paths:
- node_modules/
test:
script:
- npm ci
- npm testJika aplikasi harus bekerja di banyak runtime atau OS, matrix build menjalankan job yang sama pada setiap kombinasi tanpa menyalin YAML:
strategy:
matrix:
node: [18, 20, 22]
os: [ubuntu-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- run: npm ci
- run: npm testMatrix mengubah "aku tidak tahu apakah lulus di Node 20" menjadi jawaban mesin dalam satu push. Gunakan dengan bijak: setiap kombinasi adalah biaya runner; batasi pada kombinasi yang benar-benar didukung.
Konfigurasi pipeline yang disalin antar-repository adalah sumber drift. Reusable workflow memaketkan langkah umum (misal "build-node-app") agar dipakai ulang dan diperbarui di satu tempat:
on:
workflow_call:
inputs:
node-version:
type: string
default: "22"
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
- run: npm ci
- run: npm run buildjobs:
build-app:
uses: ./.github/workflows/build-node.yml
with:
node-version: "22"Job yang bergantung pada job lain menggunakan needs — build hanya berjalan jika lint dan test hijau:
jobs:
lint: { ... }
test: { ... }
build:
needs: [lint, test]
steps:
- run: npm run buildNote
Aturan praktis yang konsisten dengan episode 5: buat pipeline cepat, lalu jadikan hijau. Optimasi durasi baru layak setelah semua langkah stabil. Caching dan paralelisme yang diterapkan pada pipeline yang masih sering merah hanya mempercepat kegagalan — ukur stabilitas dulu, lalu kecepatan.
Alur optimasi yang bisa kalian ikuti langsung:
gh run list --workflow=ci.yml --limit 5
gh run view <run-id> --json jobs --jq '.jobs[] | {name, duration: .completed_at}'Sebuah tim yang mengubah pipeline dari 30 menit menjadi 8 menit menghemat lebih dari 180 jam developer per bulan (dengan 20 developer) — bukan angka yang kecil.
Inti yang harus dibawa pulang:
needs membuat pipeline as-code terpelihara dan terkendali.Di episode 22 selanjutnya kita membahas Cost Optimization (FinOps) — mengelola biaya cloud yang semakin menjadi beban utama organisasi: cost tracking, tagging, right-sizing, dan budget alerts. Kecepatan pipeline yang kalian optimalkan di episode ini kini harus diiringi efisiensi biaya.