Pelajari cara mengotomatisasi build, test, dan deploy aplikasi Node.js menggunakan Docker dan GitHub Actions dalam tutorial step‑by‑step yang up to date (June 2026).
1. Prasyarat
Pastikan Anda memiliki akun GitHub, Docker Desktop (versi 24.0 atau lebih baru), dan Node.js 20.x terinstall di mesin lokal. Selain itu, Anda memerlukan akses ke registry Docker (Docker Hub, GitHub Container Registry, atau Amazon ECR).
2. Membuat Repositori Node.js Sederhana
- Di terminal, buat folder proyek baru:
mkdir my-node-app && cd my-node-app - Inisialisasi proyek Node.js:
npm init -y - Instal Express (sebagai contoh framework):
npm install express - Buat
index.jsdengan kode berikut: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}`)); - Tambah script start di
package.json:"scripts": { "start": "node index.js", "test": "echo \"No tests yet\" && exit 0" }
3. Membuat Dockerfile
Di root proyek, buat file bernama Dockerfile dengan isi:
# syntax=docker/dockerfile:1.4
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
# Stage produksi
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app .
EXPOSE 3000
CMD ["npm", "start"]
Dockerfile ini memanfaatkan multi‑stage build untuk mengurangi ukuran image akhir.
4. Menguji Image Secara Lokal
- Build image:
docker build -t my-node-app:latest . - Jalankan container:
docker run -d -p 3000:3000 --name test-app my-node-app:latest - Buka
http://localhost:3000di browser, pastikan menampilkan "Hello from CI/CD!". - Hentikan dan bersihkan container:
docker rm -f test-app
5. Menyiapkan Repository GitHub
- Buat repository baru di GitHub, beri nama
my-node-app(public atau private). - Push kode lokal ke remote:
git init git add . git commit -m "Initial commit" git branch -M main git remote add origin https://github.com/USERNAME/my-node-app.git git push -u origin main
6. Membuat Workflow GitHub Actions
Di dalam repository, buat folder .github/workflows dan file ci-cd.yml dengan konten berikut:
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: '20'
- name: Install dependencies
run: npm ci
- name: Run lint (ESLint)
run: npx eslint . || true # lint optional
- name: Run tests
run: npm test
- name: Build Docker image
run: |
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
if: github.ref == 'refs/heads/main'
steps:
- name: Deploy to Fly.io (contoh)
uses: superfly/flyctl-actions@v1
with:
args: "deploy --image ghcr.io/${{ github.repository_owner }}/my-node-app:${{ github.sha }}"
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
Penjelasan singkat tiap step:
- checkout: Mengambil kode sumber.
- setup-node: Menginstall Node.js 20.
- install dependencies: Menggunakan
npm ciuntuk instalasi reproducible. - lint & test: Memastikan kualitas kode sebelum build.
- docker build: Membuat image dengan tag SHA commit.
- docker login: Otentikasi ke GitHub Container Registry (GHCR) menggunakan token otomatis.
- docker push: Mengupload image ke registry.
- deploy: Contoh deploy ke Fly.io; Anda dapat mengganti dengan AWS ECS, GKE, atau Azure Web Apps dengan langkah serupa.
7. Menambahkan Secrets ke Repository
Masuk ke Settings > Secrets and variables > Actions pada repository GitHub, lalu tambahkan:
FLY_API_TOKEN– token API Fly.io (atau token lain untuk platform target).- Jika menggunakan Docker Hub, tambahkan
DOCKERHUB_USERNAMEdanDOCKERHUB_TOKEN, lalu ubah langkah login di workflow.
8. Memverifikasi Pipeline
- Lakukan perubahan kecil, misalnya tambahkan log di
index.js, commit, dan push kemain. - Buka tab
Actionsdi GitHub, lihat jobCI/CD Pipelineberjalan secara otomatis. - Setelah job selesai, periksa registry GHCR untuk image baru, dan cek URL aplikasi di Fly.io (atau platform lain) untuk memastikan deploy berhasil.
9. Best Practice untuk CI/CD yang Stabil
- Cache dependensi: Tambahkan step
actions/cache@v4untuknode_modulesdan Docker layer cache, mengurangi waktu build.- name: Cache node modules uses: actions/cache@v4 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - Pin versi aksi: Selalu gunakan versi spesifik (mis.
@v4) untuk menghindari breaking change. - Gunakan multi‑stage Docker seperti contoh untuk image sekecil mungkin.
- Run tests in parallel jika suite besar, manfaatkan matrix strategy.
- Deploy hanya pada branch
mainataureleaseuntuk menghindari rilis tidak sengaja.
10. Skalabilitas dan Monitoring
Setelah pipeline stabil, pertimbangkan menambahkan:
- Static code analysis dengan
SonarCloudatauCodeQL. - Penilaian keamanan container menggunakan
Trivydalam workflow. - Rollback otomatis bila health check pada platform gagal setelah deploy.
Kesimpulan
Tutorial ini memberikan pondasi lengkap untuk mengotomatisasi seluruh siklus hidup aplikasi Node.js: dari build, lint, test, hingga containerisasi dan deploy ke layanan cloud modern. Dengan memanfaatkan GitHub Actions dan Docker, tim dapat merilis fitur lebih cepat, menjaga kualitas kode, dan mengurangi human error.
Dengan mengikuti langkah‑step di atas, Anda kini memiliki pipeline CI/CD terintegrasi yang membangun Docker image, menjalankan test, dan melakukan deploy otomatis setiap kali kode di‑push ke branch utama. Praktik ini tidak hanya meningkatkan kecepatan release, tetapi juga menambah kepercayaan tim terhadap kualitas aplikasi dalam era Software Engineering modern.
Panduan step‑by‑step 2026 tentang cara membuat pipeline CI/CD dengan GitHub Actions, Docker, dan deployment otomatis untuk aplikasi Node.js. Termasuk contoh kode, konfigurasi, dan best practice.
Programming,Software Engineering,Web Development
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar