用 GitHub Actions 解說 CI/CD 流程

DevOps2026-09-12TryQuickToolBox

你剛推送了一個提交,現在卻得手動執行測試、建置應用程式,再把檔案上傳到伺服器。這樣做雖然可行,但速度慢、容易出錯,而且無法規模化。這就是 CI/CD 流程派上用場的地方。

在本指南中,我們將拆解 CI/CD 概念,並示範如何用 GitHub Actions 建立真實的流程。讀完後,你將了解如何為任何專案自動化測試、建置與部署。

什麼是 CI/CD?

CI(持續整合) 是一種自動測試並將程式碼變更合併到共用分支的做法。每次推送都會觸發建置與測試執行,及早發現整合問題。

CD(持續交付/持續部署) 延伸了 CI,自動準備(並可選擇部署)你的應用程式到正式環境。持續交付意味著程式碼隨時準備好部署;持續部署則表示它會自動部署。

CI/CD 合在一起形成一條流程:一系列自動化步驟,將你的程式碼從提交帶到正式環境。

為什麼要用 GitHub Actions 做 CI/CD?

GitHub Actions 是內建於 GitHub 的 CI/CD 平台。它對公開儲存庫免費,對私有儲存庫也提供充裕的分鐘數。主要優點:

GitHub Actions 的核心概念

在撰寫第一個工作流程之前,請先了解這些術語:

術語 說明
工作流程 (Workflow) 定義在 .github/workflows/ 下 YAML 檔案中的自動化流程。
事件 (Event) 啟動工作流程的觸發條件(例如 push、pull_request)。
作業 (Job) 在同一執行器上執行的一組步驟。作業預設會平行執行。
步驟 (Step) 作業中的單一任務。可以執行命令或使用動作。
動作 (Action) 可重複使用的程式碼單元(例如 actions/checkout),可納入步驟中使用。
執行器 (Runner) 執行作業的虛擬機器(Ubuntu、Windows、macOS)。

建立你的第一個 CI 流程

讓我們為一個 Node.js 專案建立基本的 CI 工作流程。它會在每次推送和對主分支的拉取請求時執行測試。

建立 .github/workflows/ci.yml:

name: CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [18.x, 20.x]

    steps:
    - uses: actions/checkout@v4
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm ci
    - run: npm test

這個工作流程:

  1. 在推送和對 main 的 PR 時觸發。
  2. 在最新的 Ubuntu 執行器上執行名為 test 的作業。
  3. 使用矩陣針對 Node.js 18 和 20 進行測試。
  4. 簽出程式碼、設定 Node、安裝依賴項目並執行測試。

推送這個檔案並查看 Actions 頁籤。你會看到兩個平行作業(每個 Node 版本一個)。如果有任何測試失敗,工作流程就會失敗,GitHub 會通知你。

加入持續部署

CI 很棒,但 CD 才是自動化真正發光的地方。讓我們擴充工作流程,在主分支上測試通過後部署到伺服器。

我們會加入一個 deploy 作業,它依賴 test,且僅在推送至 main 時執行。

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main' && github.event_name == 'push'
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Deploy to server
      uses: appleboy/ssh-action@v1.0.0
      with:
        host: ${{ secrets.SSH_HOST }}
        username: ${{ secrets.SSH_USER }}
        key: ${{ secrets.SSH_KEY }}
        script: |
          cd /var/www/myapp
          git pull origin main
          npm ci --production
          pm2 restart myapp

重點:

這種模式適用於許多部署目標:SSH、Docker 登錄檔、雲端平台(AWS、Vercel、Netlify)或 Kubernetes。

使用 GitHub Actions 進行 CI/CD 的最佳實踐

偵錯失敗的工作流程

當工作流程失敗時,GitHub 會顯示每個步驟的日誌。常見問題包括:

你也可以將儲存庫機密 ACTIONS_STEP_DEBUG 設為 true 來啟用偵錯日誌。

常見問題

CI 和 CD 有什麼區別?

CI 自動化程式碼變更的測試與整合。CD 自動化將這些變更交付或部署到環境。CI 確保程式碼品質;CD 確保它能快速且可靠地送達使用者。

GitHub Actions 免費嗎?

GitHub Actions 對公開儲存庫免費。對於私有儲存庫,你每月可獲得免費分鐘數額度(例如免費帳戶為 2,000 分鐘),超出部分需付費。自架執行器也是一個選項。

我可以將 GitHub Actions 用於非 GitHub 專案嗎?

可以,GitHub Actions 可以執行任何命令列工具。你可以用它來建置和部署託管在其他地方的專案,只要程式碼在 GitHub 上,或你使用動作來取得它即可。

準備好簡化你的 CI/CD 了嗎?從用 GitHub Actions 自動化測試開始。如果想快速分析部署日誌,試試我們的 Nginx 日誌分析器,在每次部署後找出錯誤和效能問題。