Episode terakhir ini mengunci siklus produksi: pipeline CI/CD dengan GitHub Actions, otomasi rilis dengan semantic-release, observability melalui log terstruktur, metrik, dan health check, serta merangkum materi untuk menyusun aplikasi Node.js yang siap produksi dan maintainable.

Setiap keterampilan yang sudah kalian pelajari — dari event loop di episode 1 sampai container di episode 21 — menemukan tujuan akhirnya di produksi. Dan produksi yang sehat bertumpu pada tiga hal: perubahan dikirim secara otomatis dan aman, aplikasi bisa diamati saat berjalan, dan kode tetap mudah dikelola seiring waktu.
Episode 22 menutup series ini dengan tiga lapis terakhir: CI/CD dengan GitHub Actions, observability lewat log, metrik, dan health check, serta rangkuman menyusun aplikasi siap produksi dan maintainable. Ini episode terakhir — kalian akan melihat seluruh seri menyatu.
CI/CD mengotomatiskan alur dari push kode sampai deployment. Setiap perubahan di GitHub memicu workflow yang memasang dependensi, menjalankan test dari episode 18, dan membangun aplikasi:
name: CI
on:
push:
branches: [main]
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm ci
- run: npm test
- run: npm run buildWorkflow di atas menjalankan npm ci, npm test, dan npm run build untuk setiap push dan pull request. Jika test gagal, pipeline gagal dan perubahan tidak bisa di-deploy — inilah jaring pengaman yang membuat tim berani mengubah kode.
Environment variable seperti JWT_SECRET dan DATABASE_URL disuntikkan ke workflow melalui secrets GitHub, bukan ditulis di file. npm test bisa memakai DATABASE_URL dari secrets saat menjalankan test integrasi, sementara NODE_ENV=test menandai mode pengujian.
Semantic-release mengotomatiskan seluruh siklus rilis: menentukan versi baru, memperbarui changelog, membuat tag dan release, lalu memublikasikan paket. Versi ditentukan dari konvensi commit — feat: menaikkan minor, fix: menaikkan patch, dan breaking change menaikkan major:
npm install --save-dev semantic-release
npx semantic-releasenpx semantic-release menganalisis commit sejak rilis terakhir, menghitung versi berikutnya sesuai semver, dan menjalankan plugin untuk membuat release di GitHub. Karena konvensi commit sudah kalian pegang sejak awal series, otomasi ini bekerja tanpa campur tangan.
Tim modern memakai prerilis untuk cabang staging: versi seperti 1.2.3-rc.1 dirilis dari cabang staging, sedangkan main menghasilkan rilis stabil. Dengan cara ini, versi kandidat bisa diuji di staging sebelum dipromosikan ke produksi — seluruhnya otomatis dan terdokumentasi.
Observability menjawab "apa yang terjadi di aplikasi saya?". Log JSON dari episode 12 adalah fondasinya — dialirkan ke sistem seperti Loki atau OpenSearch, log bisa di-query berdasarkan field, bukan sekadar dibaca baris per baris.
Selain log, kumpulkan metrik — angka yang menampilkan kondisi aplikasi: jumlah request, latensi, penggunaan memori. prom-client mengekspos metrik dalam format Prometheus:
npm install prom-clientnpm install prom-client menambahkan library metrik. Gabungkan dengan collectDefaultMetrics untuk memantau event loop delay dan heap usage — dua indikator yang kita bahas di episode 19.
Endpoint /health memberi tahu orchestrator apakah aplikasi sehat dan siap menerima traffic. Saat dihentikan, aplikasi harus menutup koneksi secara elegan:
app.get("/health", (req, res) => {
res.json({ status: "ok", uptime: process.uptime() });
});
const server = app.listen(3000);
process.on("SIGTERM", () => {
console.log("Menerima SIGTERM, menutup server...");
server.close(async () => {
await pool.end();
process.exit(0);
});
});app.get("/health", ...) melaporkan status kesehatan, dan handler SIGTERM menutup server lalu membersihkan koneksi database sebelum keluar. Docker mengirim SIGTERM saat container dihentikan (episode 21) — tanpa graceful shutdown, koneksi terputus paksa dan data bisa hilang.
Aplikasi yang maintainable dimulai dari struktur folder yang jelas. Pisahkan tanggung jawab: src/routes untuk endpoint, src/services untuk logika bisnis, src/repositories untuk akses database, dan src/middleware untuk middleware bersama. Kontroler yang ramping, service yang bisa diuji, dan akses data yang terpusat adalah tanda kode yang akan disukai tim kalian satu tahun ke depan.
Maintainability bukan hasil satu keputusan besar, tapi kumpulan kebiasaan kecil:
.env.example.Seluruh seri ini dibangun untuk menumbuhkan kebiasaan itu. Aplikasi yang siap produksi bukan yang terlihat sempurna — melainkan yang bisa diubah dengan aman, diamati dengan jelas, dan dipelihara dalam jangka panjang.
Inti yang harus dibawa pulang:
npm ci, npm test, dan build di setiap push./health adalah tiga pilar observability.SIGTERM.Series Belajar Node.js selesai! Dari pre-requisites di episode 0, arsitektur event-driven, modul, server HTTP, Express, autentikasi, database, testing, hingga produksi — kalian telah menempuh perjalanan dari nol sampai aplikasi yang siap di-deploy. Lanjutkan dengan membangun project nyata, kembangkan kebiasaan mengukur dan menguji, dan terus ikuti rilis Node.js terbaru. Fondasi yang kalian bangun sekarang akan menjadi batu loncatan untuk karier sebagai Cloud & Software Engineer. Selamat berkarya!