Pelajari cara mengotomatiskan build, test, dan deploy aplikasi Node.js Anda menggunakan Docker, GitHub Actions, dan cluster Kubernetes modern dalam tutorial step‑by‑step yang up to date tahun 2026.
1. Prasyarat dan Persiapan Lingkungan
Sebelum memulai, pastikan Anda memiliki:
- Akset ke GitHub dengan hak admin pada repo.
- Docker Engine versi >= 24.0 terinstal di mesin lokal (
docker --version). - kubectl terkonfigurasi dengan cluster Kubernetes 1.30+ (misalnya GKE, EKS, atau AKS).
- Node.js LTS 22.x dan npm 10.x.
- Akun cloud provider (Google Cloud, AWS, atau Azure) dengan token akses yang dapat disimpan sebagai secret GitHub.
2. Membuat Aplikasi Node.js Sederhana
mkdir hello-ci-cd && cd hello-ci-cd
npm init -y
npm install express
cat > index.js <<EOF
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => res.send('Hello CI/CD from Node.js!'));
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
EOF
npm run test
Pastikan aplikasi berjalan dengan node index.js. Commit semua file ke repository GitHub.
3. Membuat Dockerfile yang Efisien
# syntax=docker/dockerfile:1.5
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
RUN npm run build || echo 'No build script, skipping'
FROM node:22-alpine AS runtime
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/index.js ./
EXPOSE 3000
CMD ["node", "index.js"]
Dockerfile ini menggunakan multi‑stage build untuk mengurangi ukuran image akhir dan memanfaatkan cache layer pada npm ci.
4. Menyiapkan Kubernetes Manifests
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-hello-deploy
spec:
replicas: 3
selector:
matchLabels:
app: node-hello
template:
metadata:
labels:
app: node-hello
spec:
containers:
- name: node-hello
image: ghcr.io/USERNAME/REPO:latest
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: "production"
---
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: node-hello-svc
spec:
type: LoadBalancer
selector:
app: node-hello
ports:
- protocol: TCP
port: 80
targetPort: 3000
Ganti USERNAME/REPO dengan nama pengguna dan repo Anda. Service tipe LoadBalancer akan mengekspose aplikasi secara publik di cloud provider.
5. Menambahkan GitHub Actions Workflow
# .github/workflows/ci-cd.yml
name: CI/CD Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Install dependencies
run: npm ci
- name: Lint & Test
run: |
npm run lint || echo 'No lint script'
npm test || echo 'No test script'
- name: Build Docker image
run: |
docker build -t ghcr.io/${{ github.repository }}:sha-${{ github.sha }} .
docker tag ghcr.io/${{ github.repository }}:sha-${{ github.sha }} ghcr.io/${{ github.repository }}:latest
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Push Docker image
run: |
docker push ghcr.io/${{ github.repository }}:sha-${{ github.sha }}
docker push ghcr.io/${{ github.repository }}:latest
deploy:
needs: build-test
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout repo (for manifests)
uses: actions/checkout@v4
- name: Set up kubectl
uses: azure/setup-kubectl@v3
with:
version: 'v1.30.0'
- name: Authenticate to GKE
uses: google-github-actions/get-gke-credentials@v2
with:
cluster_name: ${{ secrets.GKE_CLUSTER }}
location: ${{ secrets.GKE_ZONE }}
project_id: ${{ secrets.GCP_PROJECT }}
- name: Deploy to Kubernetes
run: |
kubectl set image deployment/node-hello-deploy node-hello=ghcr.io/${{ github.repository }}:sha-${{ github.sha }} --record
kubectl rollout status deployment/node-hello-deploy
Workflow di atas mencakup tiga fase: checkout, build & test, push image ke GitHub Container Registry (GHCR), dan akhirnya update deployment di Kubernetes menggunakan kubectl set image. Semua credential disimpan sebagai secret GitHub (GCP_PROJECT, GKE_CLUSTER, GKE_ZONE, dll.).
6. Menambahkan Best Practice Keamanan
- Scan Image: Tambahkan step
anchore/scan-actionsetelah build untuk mendeteksi vuln. - Use Minimal Base Image: Alpine sudah kecil, tapi pertimbangkan
node:22-alpine-slimbila tidak butuh seluruh toolchain. - Least‑Privilege Service Account: Pada GKE, gunakan Workload Identity dengan peran
roles/container.developerhanya untuk namespace yang diperlukan. - Tagging Strategy: Simpan tag
sha-{{github.sha}}untuk traceability danlatestuntuk fast rollback. - Rollback: Jika rollout gagal, jalankan
kubectl rollout undo deployment/node-hello-deploysecara otomatis melalui step tambahan.
7. Menguji Pipeline Secara End‑to‑End
- Push perubahan ke branch
main. - Periksa tab Actions di GitHub, pastikan semua job selesai tanpa error.
- Setelah job
deployselesai, dapatkan IP LoadBalancer:
kubectl get svc node-hello-svc
Anda harus melihat alamat EXTERNAL-IP. Buka di browser untuk memastikan pesan "Hello CI/CD from Node.js!" muncul.
8. Menambahkan Monitoring & Logging
Integrasikan dengan Google Cloud Operations atau Prometheus + Grafana. Tambahkan sidecar container Prometheus exporter pada deployment jika diperlukan.
9. Optimasi Build Speed
- Manfaatkan cache Docker layer dengan menempatkan
package*.jsonsebelum kode sumber. - Gunakan BuildKit (
DOCKER_BUILDKIT=1) untuk paralelisasi. - Jika repository besar, gunakan
actions/checkout@v4denganfetch-depth: 1untuk shallow clone.
10. Dokumentasi dan Pemeliharaan
Simpan file README yang menjelaskan cara mengaktifkan secret, memperbarui versi Node, serta prosedur rollback manual. Tag rilis di GitHub setiap kali image latest diuji di produksi.
Dengan mengikuti langkah‑langkah di atas, Anda memperoleh pipeline CI/CD otomatis yang menggabungkan Docker, GitHub Actions, dan Kubernetes. Setup ini tidak hanya mempercepat siklus release, tetapi juga meningkatkan keamanan, traceability, dan observabilitas aplikasi Node.js Anda. Terapkan best practice yang disebutkan, pantau metrik produksi, dan iterasikan pipeline seiring pertumbuhan tim dan beban kerja.
Tutorial lengkap setup CI/CD dengan GitHub Actions, Docker, dan Kubernetes untuk aplikasi Node.js pada 2026. Langkah instalasi, konfigurasi, contoh kode, dan best practice keamanan.
Programming,Software Engineering,Web Development
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar