Tutorial Setup CI/CD Pipeline dengan GitHub Actions untuk Node.js
AW
Axel W

Dipublikasikan 4 Agustus 2026

Tutorial Setup CI/CD Pipeline dengan GitHub Actions untuk Node.js

Continuous Integration dan Continuous Deployment (CI/CD) adalah fondasi dari modern software engineering. Dengan pipeline otomatis, setiap perubahan kode diuji dan dideploy tanpa intervensi manual. Artikel ini menjelaskan panduan lengkap membangun pipeline CI/CD untuk project Node.js menggunakan GitHub Actions, mulai dari test otomatis hingga deploy ke server production.

Persiapan Repository

Sebelum membuat workflow, pastikan repository GitHub sudah memiliki struktur project Node.js yang rapi. Root directory harus berisi package.json dengan script test yang terdefinisi. Contoh minimal:

{\n  \"name\": \"node-api\",\n  \"version\": \"1.0.0\",\n  \"scripts\": {\n    \"test\": \"jest\",\n    \"build\": \"tsc\",\n    \"start\": \"node dist/index.js\"\n  }\n}

Tambahkan juga file .gitignore untuk mengecualikan folder node_modules dan dist agar repository tetap bersih.

Langkah 1: Buat Workflow GitHub Actions

Buat folder .github/workflows di root repository. Di dalamnya, tambahkan file YAML untuk mendefinisikan pipeline. Contoh file ci-cd.yml:

name: CI/CD Pipeline\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: npm\n      - run: npm ci\n      - run: npm test\n\n  build-and-deploy:\n    needs: test\n    runs-on: ubuntu-latest\n    if: github.ref == refs/heads/main\n    steps:\n      - uses: actions/checkout@v4\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: npm\n      - run: npm ci\n      - run: npm run build\n      - name: Deploy to VPS\n        run: |\n          echo \"${{ secrets.SSH_KEY }}\" > key.pem\n          chmod 600 key.pem\n          scp -i key.pem -r dist/ user@server:/var/www/app/\n          ssh -i key.pem user@server \"pm2 restart app\"

Workflow di atas terdiri dari dua job: test dan build-and-deploy. Job build-and-deploy hanya berjalan jika test berhasil dan push berasal dari branch main.

Langkah 2: Konfigurasi Secrets Repository

Untuk deploy ke server private, simpan kredensial SSH di GitHub Secrets agar tidak terexpose di kode. Buka menu Settings > Secrets and variables > Actions di repository. Tambahkan secret baru:

  • SSH_KEY: private key SSH untuk autentikasi ke server production.

  • SERVER_IP: alamat IP atau hostname server target.

  • SERVER_USER: username SSH yang memiliki akses ke direktori aplikasi.

Gunakan secret reference dengan syntax {{ secrets.NAMA_SECRET }} di file workflow. GitHub akan otomatis mengganti placeholder dengan nilai asli saat runtime.

Langkah 3: Tambahkan Coverage Report

Untuk meningkatkan confidence, tambahkan coverage report ke pipeline. Modifikasi script test di package.json:

\"test\": \"jest --coverage\"

Kemudian tambahkan step upload coverage di workflow:

- name: Upload coverage to Codecov\n  uses: codecov/codecov-action@v4\n  with:\n    token: ${{ secrets.CODECOV_TOKEN }}\n    files: ./coverage/lcov.info\n    fail_ci_if_error: true

Codecov memberikan visualisasi coverage per file dan trend historis. Threshold coverage 80% adalah praktik umum untuk project Node.js komersial.

Langkah 4: Optimasi dengan Caching

GitHub Actions menyediakan caching bawaan untuk dependency manager. Parameter cache: npm pada actions/setup-node sudah cukup untuk sebagian besar kasus. Namun, untuk monorepo atau project besar, gunakan actions/cache secara eksplisit:

- name: Cache node_modules\n  uses: actions/cache@v4\n  with:\n    path: node_modules\n    key: ${{ runner.os }}-node-${{ hashFiles(package-lock.json) }}\n    restore-keys: |\n      ${{ runner.os }}-node-

Caching mengurangi waktu pipeline dari menit menjadi detik, terutama untuk project dengan dependency yang kompleks. Monitor cache hit rate melalui log workflow untuk memastikan konfigurasi efektif.

Langkah 5: Deploy ke Docker Container

Untuk environment yang lebih konsisten, deploy aplikasi menggunakan Docker. Tambahkan Dockerfile ke repository:

FROM node:20-alpine\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --only=production\nCOPY dist ./dist\nEXPOSE 3000\nCMD [\"node\", \"dist/index.js\"]

Lalu tambahkan step build dan push image di workflow:

- name: Build Docker image\n  run: docker build -t myapp:${{ github.sha }} .\n- name: Push to registry\n  run: |\n    echo ${{ secrets.REGISTRY_TOKEN }} | docker login -u user --password-stdin registry.io\n    docker push myapp:${{ github.sha }}

Deployment via container memastikan environment development dan production identik, menghilangkan masalah klasik: "works on my machine".

Langkah 6: Monitoring dan Rollback

Setelah deploy aktif, pantau health check endpoint secara berkala. Gunakan GitHub Actions scheduled workflow untuk menjalankan uptime check setiap 5 menit:

on:\n  schedule:\n    - cron: */5 agent_instructions Build This Scroll Website with NEW Grok 4.5 [kM7cHTf-RAg].webm bukaruterkun ByteDance Just Revealed Seedance 2.5 - Heres Everything You Need To Know [k0uqw2-a9vc].webm Desktop devmode-ai-weekly devmode.id Documents Downloads lirik md-enterprise-prompt microdrama Music Pasted image.png Pictures Public -quality redrama scorecard-app Seedance 2.5 Is INSANE in 2026! 30-Second AI Videos with 50 Multimodal Inputs [hHldxE-IFQo].webm simple-crm snap Templates Tools Videos x-ai.png agent_instructions Build This Scroll Website with NEW Grok 4.5 [kM7cHTf-RAg].webm bukaruterkun ByteDance Just Revealed Seedance 2.5 - Heres Everything You Need To Know [k0uqw2-a9vc].webm Desktop devmode-ai-weekly devmode.id Documents Downloads lirik md-enterprise-prompt microdrama Music Pasted image.png Pictures Public -quality redrama scorecard-app Seedance 2.5 Is INSANE in 2026! 30-Second AI Videos with 50 Multimodal Inputs [hHldxE-IFQo].webm simple-crm snap Templates Tools Videos x-ai.png agent_instructions Build This Scroll Website with NEW Grok 4.5 [kM7cHTf-RAg].webm bukaruterkun ByteDance Just Revealed Seedance 2.5 - Heres Everything You Need To Know [k0uqw2-a9vc].webm Desktop devmode-ai-weekly devmode.id Documents Downloads lirik md-enterprise-prompt microdrama Music Pasted image.png Pictures Public -quality redrama scorecard-app Seedance 2.5 Is INSANE in 2026! 30-Second AI Videos with 50 Multimodal Inputs [hHldxE-IFQo].webm simple-crm snap Templates Tools Videos x-ai.png *

Jika deploy gagal, rollback bisa dilakukan dengan memicu ulang workflow pada commit sebelumnya via GitHub UI atau API. Alternatifnya, gunakan blue-green deployment di server untuk switching instan tanpa downtime.

Kesimpulan

Pipeline CI/CD yang solid mengubah cara team mengelola software delivery. Dengan GitHub Actions, Anda membangun workflow otomatis tanpa infrastruktur tambahan. Mulai dari test paralel, lint otomatis, coverage gate, hingga deploy ke cloud atau VPS, semua bisa diatur dalam satu file YAML.

Sumber: GitHub Actions Docs, Jest Documentation