Node.js 部署實務:從 GitHub Actions 到現代化 CI/CD 策略

在現代化的開發團隊中,我們不會手動透過 FTP 上傳搬移檔案,而是建立一套自動化的 CI/CD (持續整合 / 持續部署) 流程。這能確保每一段進入正式環境的程式碼都經過嚴格測試,並以標準化的流程完成更新。

什麼是 CI/CD?

  • CI (Continuous Integration):每次推送 (Push) 程式碼時,自動執行 npm testnpm run lint。它的目標是確保新功能沒有破壞舊有的穩定性。
  • CD (Continuous Deployment):當測試通過後,自動將程式碼打包成 Docker 映像檔,並自動佈署到正式機或測試機。

自動化實戰:GitHub Actions

GitHub Actions 是目前 Node.js 社群最受歡迎的自動化工具。你只需要在專案根目錄建立 .github/workflows/deploy.yml

name: Node.js 部署流水線

on:
  push:
    branches: [main] # 僅在 main 分支變動時觸發

jobs:
  test-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 安裝 Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: 'npm'

      - run: npm ci # 比 npm install 更嚴謹,適合 CI 環境
      - run: npm test

      # 假設通過測試後,透過 SSH 遠端重啟 PM2 服務 (簡化範例)
      - name: 遠端部署
        run: |
          echo "正在將代碼同步至伺服器..."
          # 這裡通常會配合 SSH keys 或 Docker Push 邏輯

專業部署模式

為了達到「零停機」與「高安全性」,業界通常採用以下策略:

1. 藍綠部署 (Blue-Green Deployment)

  • 原理:準備兩套完全一樣的環境,「藍」環境專門跑舊版,「綠」環境專門跑新版。
  • 優點:確認新版 (綠) 沒問題後,直接在 Load Balancer 一秒切換流量。如果發現嚴重 Bug,切回舊版 (藍) 同樣只要一秒。

2. 金絲雀發布 (Canary Releases)

  • 原理:先將 5% 的流量引導到新版本,觀察是否有錯誤報警,若無異常再逐步擴大比例至 100%。
  • 優點:即使新版有 Bug,受影響的用戶比例也非常低。

3. 滾動更新 (Rolling Updates)

  • 原理:如果您有多台伺服器,一次只更新其中一台,確保集群中永遠有舊版在服務,直到全部替換完畢。

環境變數的安全管理 (Secrets)

絕不要.env 檔案或密鑰加入 Git。

  • 在 GitHub 的 Settings > Secrets and variables 中設定敏感資訊。
  • 在 Workflow 中透過 ${{ secrets.DB_URL }} 讀取並注入。

總結

  1. CI/CD 是讓團隊能快速迭代、不懼怕部署的關鍵。
  2. 始終讓 測試 成為部署前的必經之路。
  3. 掌握 藍綠部署金絲雀發布 的概念,能讓你設計出更強韌的系統架構。