快轉到主要內容
  1. 教學文章/

Github Actions: 自動化你的工作流

·5 分鐘· loading · loading · ·
版本控制 Github Git
每日拍拍
作者
每日拍拍
科學家 X 科技宅宅
目錄
版本控制: Git - 本文屬於一個選集。
§ 4: 本文

Github Action 簡介
#

在現代軟體開發中,速度和穩定性缺一不可。你是否曾經在每次推送(Push)程式碼後,還需要手動執行測試、打包(Build)專案,然後再登入伺服器進行部署(Deploy)?這些重複性的任務不僅耗時,也容易因人為疏忽而出錯。

這就是 GitHub Actions 登場的時刻。

什麼是 GitHub Actions?
#

簡單來說,GitHub Actions 是 GitHub 內建的持續整合與持續部署(CI/CD)平台。它允許你直接在你的 GitHub 倉庫(Repository)中自動化執行你的軟體開發工作流程。

你不需要再依賴或設定額外的第三方 CI/CD 服務,GitHub Actions 讓「自動化」成為你程式碼管理的一部分。 就像拍拍君在寫完一篇blog 文章後,不需要手動更新網站,只需要把blog 的文章 Push 到 Github, Github Actions 就會幫拍拍君把文章轉換成 html (透過Hugo) 然後部署到 Github Pages。

真是太方便啦~!

它是如何運作的?
#

GitHub Actions 的核心概念是「事件驅動」。你可以設定當某些「事件」發生時,Github會自動執行一系列的「動作」。

事件(Events): 觸發自動化流程的時機。最常見的像是 push 程式碼到特定分支、有人建立 pull request,甚至可以是定時任務(例如每天半夜執行)。

工作流(Workflows): 這是自動化流程的藍圖。你需要在你的專案中建立一個 .github/workflows 資料夾,並在裡面使用 YAML 檔案來定義工作流。

作業(Jobs): 一個工作流可以包含一或多個作業,這些作業可以並行或依序執行。例如,一個「測試」作業和一個「建置」作業。

步驟(Steps): 每個作業由一系列的步驟組成。步驟可以是執行一個 shell 指令(例如 npm install),或是使用一個「Action」。

動作(Actions): 這是最關鍵的部分。Action 是一個可重複使用的程式碼單元。你可以使用 GitHub 官方提供的 Actions、社群在 Marketplace 上分享的 Actions(例如:actions/checkout 用來拉取程式碼、actions/setup-node 用來設定 Node.js 環境),甚至自己撰寫。

範例: 拍拍君的網站workflow
#

拍拍君的網站是用 Hugo 撰寫的,所有的網站設定和文章放在 Github 裡面的一個 repo, 再使用 Github Pages 來發佈網站。

其中,Hugo檔案和文章是在main branch,然後發佈的靜態網站是在gh-pages branch

./github/workflows/deploy.yml
#

name: Deploy

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

permissions:
  contents: write  # allow pushing commits
  actions: read    # allow reading workflows, logs, etc.

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Website Repo
        uses: actions/checkout@v3
        with:
          submodules: recursive

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: '0.147.0'  # or the version you want

      - name: Build Hugo Site
        run: |
          cd src
          hugo --source . --destination ./public --baseURL "https://dailypypy.org/"

      - name: Add CNAME file
        run: |
          echo "dailypypy.org" > ./src/public/CNAME

      - name: Deploy to gh-pages Branch
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./src/public
          publish_branch: gh-pages

其他進階使用
#

Github Actions 還有其他非常多好用的功能,拍拍君有機會再跟大家介紹。 譬如:

  1. 使用 Matrix(矩陣)進行交叉測試 你是否需要確保你的專案在多種環境下都能正常運作?例如,你的 Python 專案需要同時支援 Python 3.83.93.10,並且在 Linux 和 Windows 上都不能出錯。

    這時 strategy: matrix: 設定就是你的救星。

    你可以在 YAML 檔案中定義一個「矩陣」,列出所有你想測試的組合(例如,不同的作業系統、Node.js 版本、Python 版本或特定套件版本)。GitHub Actions 會為每 一個組合自動建立並執行一個獨立的作業(Job)。這對於開發開源套件或需要高度相容性的專案來說至關重要。

  2. 使用 on: schedule 執行定時任務 並非所有的工作流都必須由 pushpull_request 觸發。有時候,你會需要「排程」任務。

    透過 on: schedule: 並搭配 cron 語法,你可以設定工作流在固定的時間自動執行。

    應用場景:

    • 每日建置 (Nightly Build): 每天凌晨抓取最新的程式碼進行完整的測試與建置。
    • 自動更新依賴: 每週一自動執行 npm updatepip install -U 並發出 PR。
    • 產生報告: 每天定時抓取資料並產生營運報告。
    • 爬蟲任務: 定時執行爬蟲腳本來獲取最新資訊。
  3. 使用 Environments(環境)與 Secrets(密鑰) 當你的自動化流程需要部署(Deploy)到「測試環境」或「正式環境」時,安全就是首要考量。你絕對不該把資料庫密碼、API 金鑰或伺服器憑證直接寫在 YAML 檔案中。

    • Secrets (密鑰): 這是 GitHub 提供的安全儲存庫,用於存放敏感資訊。你可以在 Action 中透過 ${{ secrets.YOUR_SECRET_NAME }} 來安全地存取它,日誌中會自動將其遮蔽,避免外洩。

    • Environments (環境): 這是更進階的功能。你可以建立名為 production 或 staging 的環境。你可以為特定環境設定專屬的密鑰,甚至可以加上「人工審核」關卡——例如,部署到 production 前,必須由特定團隊成員點擊「Approve」才能繼續。

  4. 使用 actions/cache 加速工作流 你的 CI 流程是不是每次都要花好幾分鐘在 npm installpip installmvn install 上?這些依賴套件通常不會天天變動,重複下載非常浪費時間。

    actions/cache 是一個官方提供的 Action,它允許你將這些下載好的依賴項目「快取」起來。當工作流下次執行時,如果依賴項目沒有變更(例如 package-lock.json 檔案未變),它會直接從快取中還原,過程可能只需要幾秒鐘,大幅縮短 CI/CD 的等待時間。

  5. 使用 Self-hosted Runners(自架執行器) GitHub 預設提供的執行器(Runner)是在雲端的虛擬機,非常方便。但有時你會遇到特殊需求:

    • 你的建置需要存取公司內網(Private Network)的資源。
    • 你需要特殊的硬體規格(例如 GPU 來進行 ML 模型的測試)。
    • 你有合規性要求,資料不能在外部伺服器上處理。

    這時,你可以使用 Self-hosted Runners。你可以在自己的伺服器(無論是地端主機或雲端 VM)上安裝 GitHub Actions 的代理程式,讓它成為專屬於你的執行器。這讓你擁有對執行環境的 100% 控制權。

結語
#

GitHub Actions 大幅降低了導入 CI/CD 的門檻。它能幫你把時間從重複的勞動中解放出來,讓你更專注於撰寫有價值的程式碼。

如果你的專案還在手動部署,不妨現在就到你的 GitHub 倉庫,點擊 “Actions” 分頁,開始你的第一個自動化工作流吧!

版本控制: Git - 本文屬於一個選集。
§ 4: 本文

相關文章

GitHub 指令工具
·2 分鐘· loading · loading
版本控制 Git 指令模式 Github
版本控制軟體 Git - 安裝篇
·3 分鐘· loading · loading
版本控制 Git
Apple Vision Pro with M5 搶先體驗!
·8 分鐘· loading · loading
搶先體驗 VisionOS VisionPro XR VR
Python: 我需要進度條! tqdm
·3 分鐘· loading · loading
Python Tqdm Data Science
超好用的本地LLM: Ollama
·6 分鐘· loading · loading
好玩軟體 LLM Ollama
讓你的終端機華麗變身:Rich 套件教學
·2 分鐘· loading · loading
Python Rich Cli