GitHub Actions 全攻略:從零開始自動化 Go 專案部署與發布流程教學

作者: Calpa Liu
字數:1812
出版:2025 年 3 月 17 日
分類: 後端開發 雲端架構 CI/CD
想學會如何用 GitHub Actions 自動化部署與發布 Go 專案嗎?這篇文章將從零開始,帶你建立一個完整的 CI/CD 流程,透過 YAML 設定工作流程,自動測試、編譯與打包應用程式,並將結果透過 GitHub Release 發布到多平台。無論你是第一次接觸 GitHub Actions,還是想優化現有流程,都能從中獲得實用技巧。

為什麼選擇自動化 CI/CD?

CICD
CICD

在許多開發團隊中,手動部署流程仍然相當常見,尤其是在小型專案或初期創業團隊。但隨著專案規模成長、團隊擴大或交付頻率提升,傳統部署方式往往成為效率與品質的瓶頸。相比之下,導入 CI/CD(持續整合與持續部署)能顯著優化整體開發流程,讓開發團隊以更快速度、更高穩定性持續釋出新功能。

下表彙整了手動部署與自動化 CI/CD 的主要差異:

特性手動部署 🚶‍♂️😩自動化 CI/CD 🤖🚀
部署速度🕒 需手動執行多個步驟,常有延遲自動觸發,快速部署至多環境 ⚡️
錯誤風險❌ 人為操作易錯自動校驗,降低錯誤率 ✅
流程類型📚 依賴文檔與經驗,難以一致代碼化流程,邏輯一致且可控 🧩
可重複性🎲 操作不穩定,依賴個人執行結果可預期、可驗證 🔍
協作效率🧑‍💻 部署方式各異,難統一共用流程,提升協作 🤝

舉例來說,當你需要釋出一個新版本,手動部署可能需要:編譯 → 上傳伺服器 → 修改版本號 → 手動測試 → 發布通知……這些步驟不僅耗時,還非常仰賴操作人的準確性與經驗。一旦有新成員加入,光是學習部署流程就可能成為障礙。

而 CI/CD 工具(如 GitHub Actions)可以讓這一切流程自動化執行,只需推送一個版本標籤(如 v1.2.0),系統就會自動完成測試、打包、發布甚至通知。這樣不僅節省時間,也提升整體產品交付的穩定性與可預測性。

對於需要快速釋出、頻繁更新的軟體團隊來說,自動化 CI/CD 已經不再是「進階選項」,而是現代開發的基本標配。

GitHub Actions 是什麼?

GitHub Actions 是 GitHub 於 2018 年推出的強大工作流程自動化框架,允許開發者直接在 GitHub 儲存庫中定義、執行和自動化軟體開發工作流程。它的核心設計理念是簡化開發流程,提供靈活的自動化功能,並為開發者提供易於使用的 CI/CD 能力。

在 GitHub Actions 中,工作流程通過 YAML 檔案定義,存放在儲存庫的 .github/workflows 目錄中。這些工作流程可以由多種事件觸發,包括推送代碼、創建標籤、提交 Pull Request 等。每個工作流程由一系列任務(jobs)組成,而每個任務又包含多個步驟(steps)。

為什麼選擇 GitHub Actions 自動化部署?七大關鍵優勢

"https://i.imgur.com/YifwbbM.png"
"https://i.imgur.com/YifwbbM.png"

自動化發布流程顯著加速了從代碼提交到產品發布的速度,提升了代碼質量,並簡化了多平台構建、打包和發布等複雜流程。研究表明,使用 CI/CD 流程的組織平均縮短了 33% 的上市時間,並能提高軟體質量,減少生產環境中的缺陷。GitHub Actions 中的自動測試和工作流程確保每次發布都遵循相同的步驟,消除了手動部署中常見的不一致性。這種可重複性對於維護軟體質量和可靠性至關重要。自動化不僅節省時間,還減少了因複雜手動步驟導致的錯誤,從而在競爭激烈的軟體市場中提供顯著優勢。

此外,CI/CD 流程促進了開發團隊之間的協作,提升了團隊效率。GitHub Actions 與 GitHub 平台深度集成,響應任何 webhook 事件,提供便捷的使用體驗。只需在儲存庫中添加 YAML 文件,即可建立完整的發布流程。GitHub Marketplace 提供超過 10,000 個預先編寫和測試的自動化動作,這些動作涵蓋從測試到部署的各種需求,大大簡化了工作流程的建立。根據 Puppet 的 DevOps 調查,擁有強大 CI/CD 實踐的組織報告的團隊效率比沒有此類實踐的組織高出 60%,改善了溝通,消除了不同團隊之間的孤島現象。

GitHub Actions YAML 設定與 Release 範例完整解析

Workflows
Workflows

以下是一個用於自動化軟體發布的 GitHub Actions 工作流程範例,我們將逐部分分析:

name: Release

on:
  push:
    tags:
      - "v*"

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Go
        uses: actions/setup-go@v4
        with:
          go-version: "1.21"
          check-latest: true

      - name: Run tests
        run: go test -v ./...

      - name: Build for all platforms
        run: |
          mkdir -p release
          GOOS=darwin GOARCH=amd64 go build -o urusai-macos-amd64
          GOOS=darwin GOARCH=arm64 go build -o urusai-macos-arm64
          GOOS=linux GOARCH=amd64 go build -o urusai-linux-amd64
          GOOS=windows GOARCH=amd64 go build -o urusai-windows-amd64.exe

          tar -czf release/urusai-macos-amd64.tar.gz urusai-macos-amd64
          tar -czf release/urusai-macos-arm64.tar.gz urusai-macos-arm64
          tar -czf release/urusai-linux-amd64.tar.gz urusai-linux-amd64
          zip release/urusai-windows-amd64.zip urusai-windows-amd64.exe

      - name: Create Release
        id: create_release
        uses: softprops/action-gh-release@v1
        with:
          files: |
            release/urusai-macos-amd64.tar.gz
            release/urusai-macos-arm64.tar.gz
            release/urusai-linux-amd64.tar.gz
            release/urusai-windows-amd64.zip
          draft: false
          prerelease: false
          generate_release_notes: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

工作流程觸發條件

on:
  push:
    tags:
      - "v*"

這段配置設定了工作流程的觸發條件:當有以 “v” 開頭的標籤被推送到儲存庫時(例如 v1.0.0),工作流程就會自動執行。這是一種常見的發布版本標記方式,確保發布工作流程只在真正需要發布新版本時執行。

執行環境與步驟

jobs:
  build:
    runs-on: ubuntu-latest

這個工作流程在最新版本的 Ubuntu 環境中執行,GitHub Actions 提供了託管的虛擬機器環境,包括 Ubuntu、Windows 和 macOS。

Go Lang
Go Lang

步驟部分詳解:

  1. 檢出代碼:使用官方的 actions/checkout@v3 動作將儲存庫代碼檢出到運行環境。

  2. 設置 Go 環境:使用 actions/setup-go@v4 安裝指定版本的 Go 語言環境(1.21)。

  3. 執行測試:運行 Go 語言的測試命令,確保代碼變更沒有引入錯誤。

  4. 多平台構建:為不同操作系統(macOS、Linux、Windows)和架構(amd64、arm64)編譯應用程式,並將生成的二進制檔案打包為壓縮檔案。

  5. 創建發布:使用第三方動作 softprops/action-gh-release@v1 自動創建 GitHub Release,上傳所有構建產物,並生成發布說明。

總結

在快速演進的軟體開發環境中,手動部署已無法滿足現代團隊對效率與可靠性的需求。GitHub Actions 提供了一套直觀、可擴充且與 GitHub 深度整合的自動化平台,讓你能從代碼提交、測試、打包到跨平台發布,全程自動化、零摩擦地完成部署流程。

本文透過實際 Go 專案為例,展示了如何設定 YAML、構建多平台產物並自動產出 GitHub Release。這不僅能顯著提升開發速度與一致性,也讓你更專注在產品本身,而非繁瑣的釋出程序。

希望這篇實作分享對你有幫助!如果你也正在導入 GitHub Actions,歡迎留言交流,或把這篇轉發給需要的夥伴 🙌

後端技術日新月異,訂閱本站,第一時間掌握 Node.js、Python、Docker 等核心技術動態!
關於 Calpa

Calpa 擅長使用 TypeScriptReact.jsVue.js 建立 Responsive Website。

他積極參與開源社區,曾在 2019 年的香港開源大會上擔任講者,提供工作經驗和見解。此外,他也在 GitHub 上公開分享個人博客程式碼,已獲得超過 300 顆星星和 60 個分支的支持。

他熱愛學習新技術,並樂意分享經驗。他相信,唯有不斷學習才能跟上快速演變的技術環境。

熱門文章

最新文章