【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 留言
發表留言