【DevOps 實戰】GitHub Actions 新手指南:從零打造你的第一個自動化流水線

2026-01-01 09:45 | By justin | github actions
(Updated: 2026-01-01 09:45)

【DevOps 實戰】GitHub Actions 新手指南:從零打造你的第一個自動化流水線

各位開發者好!

你是否曾經遇過這些情況:

寫完程式碼,忘記跑測試就 Push,結果把 Production 環境弄掛了?

每次發布新版本,都要手動 SSH 連進伺服器 git pull,覺得很煩? 寫了一隻爬蟲,但電腦關機就不能跑,不想為了它租一台 VPS?

如果有,那你絕對需要學會 GitHub Actions。它是 GitHub 在 2019 年推出的 CI/CD(持續整合/持續部署)服務。

簡單來說:它就是住在你 GitHub 倉庫裡的免費機器人,你可以寫劇本命令它在特定時間、或特定事件發生時,幫你執行任何指令。

今天這篇指南,帶你從零開始,看懂 .yml 設定檔,並打造你的第一條自動化流水線。


核心概念:GitHub Actions 的四大天王

在寫程式碼之前,我們先搞懂四個名詞,不然看官方文件會像看天書: Workflow (工作流程)

這是最上層的概念。一個 .yml 檔案就是一個 Workflow。它定義了「什麼時候觸發」以及「要做什麼事」。

Event (事件 / Trigger)

觸發 Workflow 的開關。例如:「當有人 Push 代碼時」、「每天早上 9 點」、「有人開了 Pull Request 時」

Job (任務): 一個 Workflow 可以包含多個 Job(例如:一個 Job 跑測試,一個 Job 跑部署)。預設情況下,Job 是平行執行的(同時跑)。

Step (步驟)

Job 裡面的細項。例如:「第一步下載代碼」、「第二步安裝 Python」、「第三步執行腳本」。


實戰一:你的第一個 Hello World GitHub Actions 的規則非常死板,檔案必須放在專案根目錄的 .github/workflows/ 資料夾下。 我們來建立一個簡單的檔案 .github/workflows/demo.yml:

name: My First Workflow

# 1. 觸發條件:當 push 到 main 分支時
on:
  push:
    branches: [ "main" ]

# 2. 定義任務
jobs:
  say-hello:
    # 指定執行環境 (GitHub 免費借你的電腦)
    runs-on: ubuntu-latest

    # 定義步驟
    steps:
      - name: 隨便印點東西
        run: echo "Hello, GitHub Actions! 我成功了!"

      - name: 查看系統資訊
        run: |
          echo "現在時間:"
          date
          echo "這台電腦的 Python 版本:"
          python --version

發生了什麼事?

只要你把這個檔案 Push 上去,GitHub 就會自動偵測到,並且分配一台 Ubuntu 的虛擬機給你,執行裡面的 echo 指令。你可以去 GitHub 專案頁面的 "Actions" 分支查看執行結果。

實戰二:Python 專案的自動化測試 (CI) 這才是我們最常用的場景。假設你有一個 Python 專案,你希望每次 Push 代碼時,機器人自動幫你:

下載程式。 安裝 Python 環境。 安裝依賴 (pip install). 跑測試 (pytest)。 新建 .github/workflows/python-test.yml:

name: Python CI Test

on: [push, pull_request] # Push 或 PR 都會觸發

jobs:
  build-and-test:
    runs-on: ubuntu-latest

    steps:
      # Step 1: 把你的 Code 下載到虛擬機 (這是官方寫好的 Action,直接用)
      - name: Checkout code
        uses: actions/checkout@v4

      # Step 2: 設定 Python 環境
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12' # 指定版本
          cache: 'pip' # 開啟快取,讓下次安裝快一點

      # Step 3: 安裝依賴
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
          # 假設你有安裝 pytest
          pip install pytest 

      # Step 4: 執行測試
      - name: Run Tests
        run: |
          # 這裡假設你的測試檔放在 tests/ 資料夾
          pytest

為什麼這很重要? 這就是 CI (Continuous Integration) 的精髓。它確保了爛 code 不會混進主分支。如果有人提交了會讓測試失敗的代碼,GitHub 會給該次 Commit 打上紅色的 ❌,並發信警告你。


實戰三:定時任務 (Cron Job) - 爬蟲救星 這就是我們之前做「股票監控機器人」用到的功能。不需要 Push 代碼,時間到了自己動。 新建 .github/workflows/daily-task.yml:

name: Daily Cron Job

on:
  schedule:
    # 這裡是最容易踩雷的地方!
    # GitHub 使用 UTC 時間 (台灣是 UTC+8)
    # 想要台灣早上 09:00 執行 -> UTC 01:00
    - cron: '0 1 * * *' # 每天 UTC 01:00 執行

  # 加上這個讓你可以在網頁上按按鈕手動觸發 (除錯神器)
  workflow_dispatch:

jobs:
  run-script:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Install Libs
        run: pip install requests

      - name: Run Bot
        env:
          # 讀取你在 GitHub Settings 設定的密碼
          MY_API_KEY: ${{ secrets.MY_API_KEY }}
        run: python main.py

進階技巧:管理敏感資料 (Secrets) 千萬不要把你的 API Key、密碼、Discord Webhook 網址直接寫在 .yml 或 .py 檔案裡上傳!

正確做法: 進入 GitHub Repo 頁面 -> Settings。 左側選單 -> Secrets and variables -> Actions。 點擊 New repository secret。 Name: MY_API_KEY, Secret: 你的真實密碼。 在 Workflow 中使用時,語法是 ${{ secrets.MY_API_KEY }},GitHub 會自動幫你在 Log 裡打碼(顯示為 ***)。

常見問題 (Q&A)

Q: 這是免費的嗎? A: 對於 公開倉庫 (Public Repo),完全免費,隨便你跑。對於 私有倉庫 (Private Repo),每個月有 2,000 分鐘的免費額度。對於個人開發者來說,這幾乎用不完。


Q: 我可以用它來做什麼? 自動部署:Push 到 main 分支後,自動把網站部署到 AWS/GCP/Vercel。 格式檢查:自動跑 Lint (black/flake8),代碼寫太醜直接報錯。 發布軟體:自動把 Python 打包成 .exe 並發布到 Releases 頁面。


Q: 為什麼我的 Cron Job 沒有準時跑? A: GitHub Actions 的排程不是「秒級精準」的。在尖峰時段,它可能會延遲 10~30 分鐘才啟動,這對於免費服務來說是正常的。 結語


GitHub Actions 改變了現代軟體開發的遊戲規則。以前我們要維護 Jenkins Server,或者手動做一堆重複的事情。現在,只要一個 .yml 檔,你的專案就擁有了一個 24 小時待命的 DevOps 工程師。 不管你是寫爬蟲、寫網頁、還是寫 App,現在就去你的專案裡加上第一個 Workflow 吧!


0 留言

目前沒有留言

發表留言
回覆