Pelajari cara mengotomatiskan build, test, dan deploy aplikasi Node.js menggunakan Docker dan GitHub Actions dalam panduan step‑by‑step terperinci yang up‑to‑date untuk Juni 2026.
1. Prasyarat
Pastikan Anda memiliki:
- Akun GitHub dengan akses ke repository.
- Docker Engine 24.0+ terinstall di mesin lokal (panduan instalasi).
- Node.js 20 LTS terinstall.
- Git CLI.
2. Membuat Proyek Node.js Baru
mkdir my-node-app && cd my-node-app
npm init -y
npm i express
Buat file index.js sederhana:
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => res.send('Hello from CI/CD!'));
app.listen(PORT, () => console.log(`🚀 Server running on port ${PORT}`));
3. Menulis Dockerfile
Buat file Dockerfile di root project:
# syntax=docker/dockerfile:1.4
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
# Build stage (optional untuk transpiler, contoh TypeScript)
# RUN npm run build
FROM node:20-alpine AS runtime
WORKDIR /app
COPY --from=builder /app .
EXPOSE 3000
CMD ["node", "index.js"]
Best practice: gunakan multi‑stage build untuk mengurangi ukuran image, hindari npm install di runtime, dan set NODE_ENV=production pada langkah build.
4. Membuat .dockerignore
node_modules
npm-debug.log
Dockerfile
.git
.gitignore
5. Push Repository ke GitHub
git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com//my-node-app.git
git push -u origin main
6. Konfigurasi GitHub Actions Workflow
Buat folder .github/workflows dan file 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 repository
uses: actions/checkout@v4
- name: Set up Node.js 20
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Lint code (ESLint)
run: npx eslint . --ext .js
- name: Run unit tests
run: npm test --if-present
- name: Build Docker image
run: |
docker version
docker build -t ghcr.io/${{ github.repository_owner }}/my-node-app:${{ github.sha }} .
- name: Log in 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_owner }}/my-node-app:${{ github.sha }}
deploy:
needs: build-test
runs-on: ubuntu-latest
environment: production
steps:
- name: Deploy to Render (contoh PaaS)
uses: render-examples/render-deploy-action@v1
with:
service-id: ${{ secrets.RENDER_SERVICE_ID }}
api-key: ${{ secrets.RENDER_API_KEY }}
image: ghcr.io/${{ github.repository_owner }}/my-node-app:${{ github.sha }}
Penjelasan tiap job:
- build-test: checkout kode, setup Node, instalasi deps, lint, test, build image, push ke GitHub Container Registry (GHCR).
- deploy: setelah image berhasil dipush, workflow memanggil action khusus penyedia platform (contoh Render, dapat diganti ke Fly.io, Railway, atau Kubernetes).
7. Mengamankan Secrets
Tambahkan secret ke repository:
GITHUB_TOKENsudah tersedia otomatis.RENDER_API_KEYdanRENDER_SERVICE_IDharus di‑create di Settings → Secrets → Actions.
8. Memverifikasi Pipeline
Push perubahan baru ke main dan periksa tab Actions di GitHub. Semua step harus lulus. Jika build gagal, periksa log; biasanya masalah terletak pada linting atau test yang belum di‑setup.
9. Deploy ke Kubernetes (Opsional)
Jika tim Anda menggunakan K8s, tambahkan job tambahan di workflow:
deploy-k8s:
needs: build-test
runs-on: ubuntu-latest
steps:
- name: Set up kubectl
uses: azure/setup-kubectl@v3
with:
version: 'v1.28.0'
- name: Configure kubeconfig
run: |
echo "$KUBE_CONFIG" | base64 -d > $HOME/.kube/config
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG_BASE64 }}
- name: Update image in deployment
run: |
kubectl set image deployment/my-node-app my-node-app=ghcr.io/${{ github.repository_owner }}/my-node-app:${{ github.sha }} --record
Pastikan KUBE_CONFIG_BASE64 berisi konfigurasi cluster yang sudah diencode ke base64.
10. Best Practice Tambahan
- Cache layer Docker: letakkan
COPY package*.jsonsebelum source code untuk memanfaatkan cache layer pada rebuild. - Multi‑arch images: tambahkan flag
--platform linux/amd64,linux/arm64padadocker buildxjika Anda melayani runner dengan arsitektur berbeda. - Rollback strategy: simpan tag
latestdanstabledi GHCR; gunakankubectl rollout undobila diperlukan. - Security scanning: integrasikan
trivyatauanchoredalam workflow untuk memindai kerentanan image. - Observability: tambahkan health‑check di Dockerfile dan configure Prometheus/Grafana di cluster untuk monitoring.
11. Penutup
Dengan mengikuti langkah‑langkah di atas, Anda memiliki pipeline CI/CD yang modern, scalable, dan sepenuhnya berbasis cloud. Semua komponen—Docker, GitHub Actions, dan registry GHCR—beroperasi secara native pada ekosistem 2026, memberikan kecepatan iterasi yang dibutuhkan tim Development dan Software Engineering saat ini.
Implementasi CI/CD otomatis dengan Docker dan GitHub Actions tidak hanya meningkatkan kecepatan release, tetapi juga menegakkan standar kualitas melalui linting, testing, dan scanning keamanan. Dengan menambahkan opsi deployment ke Kubernetes atau platform PaaS, tim dapat memilih infrastruktur yang paling cocok, sekaligus menjaga keterlacakan versi image melalui tag SHA. Terapkan best practice di atas, dan Anda siap menghadapi tantangan Programming, Software Engineering, dan Web Development modern.
Panduan langkah demi langkah 2026 untuk mengatur pipeline CI/CD dengan Docker dan GitHub Actions pada aplikasi Node.js, lengkap dengan contoh kode, konfigurasi, dan best practice.
Programming,Software Engineering,Web Development,CI/CD,Docker,GitHub Actions,Node.js
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar