文章最後更新於 2025 年 4 月 6 日
GitHub Actions 詳細內容
1. 什麼是 GitHub Actions?
定義
GitHub Actions 是一種 CI/CD (持續整合/持續部署) 解決方案,旨在幫助開發者自動化他們的工作流程。它允許開發者在 GitHub 儲存庫中直接設置和管理自動化過程,無需依賴外部工具或服務。GitHub Actions 的引入使得開發者可以更輕鬆地將代碼從開發階段推向生產環境,並在每次代碼變更時自動進行測試和部署。
主要功能
- 自動執行代碼測試:開發者可以在每次推送代碼時自動運行單元測試,確保代碼的質量。
- 自動部署:在代碼合併至主分支後,可以自動將應用程式部署到指定的環境中,例如生產環境或測試環境。
- 監控與通知:整合其他服務以便於監控工作流的狀態,並在發生錯誤時通知相關人員。
優勢
- 提高開發效率:透過自動化重複性任務,開發者可以將時間用於更具創造性的工作。
- 減少人為錯誤:自動化工作流有助於降低因手動操作而導致的錯誤風險。
- 易於集成:GitHub Actions 可以與許多第三方服務和工具無縫集成,進一步提升工作流的效能。
2. GitHub Actions 的基本組成
工作流(Workflow)
工作流是一個定義自動化過程的 YAML 文件,通常放在 .github/workflows
目錄下。它可以包含多個任務,每個任務可以包含多個步驟。工作流的基本結構如下:
name: CI Workflow
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
任務(Job)
任務是工作流中的一個執行單元,包含一系列步驟。每個任務可以在不同的環境中運行,例如不同的作業系統或容器。任務的定義示例如下:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Run tests
run: npm test
步驟(Step)
步驟是在任務中執行的具體操作,可以是命令、腳本或調用其他 Action。每個步驟可以獨立運行,並且可以使用條件來決定是否執行。以下是一個步驟的例子:
steps:
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
3. 如何創建一個簡單的工作流
步驟一:創建 .github/workflows
目錄並添加 YAML 文件
首先,您需要在您的 GitHub 儲存庫中創建一個名為 .github/workflows
的目錄。在這個目錄中,您可以創建一個新的 YAML 文件,這個文件是您工作流的定義文件。
步驟二:定義觸發條件
您需要在 YAML 文件中定義觸發條件,例如在代碼推送到主分支時自動運行工作流。以下是一個示例:
name: CI Workflow
on:
push:
branches:
- main
步驟三:添加任務和步驟
接下來,您需要定義一個或多個任務以及在每個任務中要執行的步驟。例如,您可以添加一個任務來運行單元測試:
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
4. 使用 Actions Marketplace
定義
Actions Marketplace 是一個集中管理和分享 GitHub Actions 的平台,開發者可以在這裡找到許多開源和社區貢獻的 Actions,從而擴展自己的工作流。
如何搜尋和選擇
開發者可以在 Marketplace 中通過關鍵字搜索來查找適合的 Action。每個 Action 都有詳細的說明和使用評價,幫助開發者做出選擇。例如,您可以搜索“docker”來找到與 Docker 相關的 Actions。
自定義 Action
如果現有的 Action 無法滿足您的需求,您可以根據特定需求創建自己的 Action。自定義 Action 可以是 Docker 容器或 JavaScript 函數。以下是一個簡單的自定義 Action 的範例:
name: 'My Custom Action'
description: 'An Action to greet someone'
inputs:
name:
description: 'The name to greet'
required: true
runs:
using: 'node12'
main: 'dist/index.js'
5. 實作示例:從代碼檢查到部署
代碼檢查
首先,設置工作流以自動執行單元測試和代碼靜態分析。以下是一個簡單的範例,在每次推送代碼時自動運行代碼檢查:
name: CI Workflow
on:
push:
branches:
- main
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Install dependencies
run: npm install
- name: Run ESLint
run: npx eslint .
自動部署
接下來,您可以設置條件,以便在代碼合併至主分支時自動部署到生產環境。以下是一個部署到 Heroku 的範例:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Deploy to Heroku
env:
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
run: |
git remote add heroku https://git.heroku.com/<your-app>.git
git push heroku main
通知和監控
您可以整合通知服務(如 Slack 或 Email)以更新部署狀態。以下是一個使用 Slack 發送通知的示例:
jobs:
notify:
runs-on: ubuntu-latest
steps:
- name: Send notification
uses: slackapi/[email protected]
with:
channel: '#deployments'
payload: '{"text": "Deployment successful!"}'
6. 常見問題與最佳實踐
常見錯誤
- 忘記觸發條件:確保在 YAML 文件中正確設置
on
觸發條件。 - 步驟失敗:檢查步驟中的命令是否正確,並確保所有依賴都已安裝。
性能優化
- 使用快取:使用 GitHub Actions 提供的快取功能來加速依賴的安裝時間。
- 分佈式任務:將長時間運行的任務分成多個小任務,以提高執行效率。
安全性考量
- 使用秘密變數:將敏感資料如 API 密鑰存儲在 GitHub Secrets 中,避免在工作流中硬編碼。
- 限制權限:為工作流設定合適的權限,減少潛在的安全風險。
透過上述內容,讀者可以對 GitHub Actions 有基本的理解,並能夠開始自動化自己的工作流程。無論是簡單的 CI/CD 工作流還是複雜的自定義 Actions,GitHub Actions 都能提供強大的支持。
關於作者
- 我是Oscar (卡哥),前Yahoo Lead Engineer、高智商同好組織Mensa會員,超過十年的工作經驗,服務過Yahoo關鍵字廣告業務部門、電子商務及搜尋部門,喜歡彈吉他玩音樂,也喜歡投資美股、虛擬貨幣,樂於與人分享交流!
最新文章
- 2025 年 4 月 6 日DevOps 自動化實踐初學者指南使用 Github Actions 進行自動化流程
- 2025 年 2 月 8 日Spring Boot 技術應用新手指南 Spring Boot 分佈式限流的實現方法
- 2025 年 2 月 6 日圖表與可視化工具初學者指南使用Mermaid進行圖表和圖形繪製
- 2025 年 1 月 30 日Java Spring Boot 技術應用掌握 Java Spring Boot 的Graceful Shutdown技巧 新手必看