GitHub Actions 是由 GitHub 提供的服務,用於在 GitHub 建置、測試、封裝、發佈或部署任何專案。並可藉此建置端對端 (end-to-end) CI/CD 功能,即持續整合/持續交付 (微軟譯為持續傳遞) 服務。
# 核心概念
- Workflow: 可設定的自動化流程,用於在 GitHub 上建置、測試、封裝、發佈或部署任何專案。Workflow 由一個或多個 Job 組成,可以透過排程或觸發事件而啟動。
- Workflow 檔案: 是一個 YAML 檔案,應放在專案根目錄的
.github/workflows
資料夾中 - Job: 由 Step 所組成,每個 Job 皆在新的執行個體 (instance) 中執行。Job 可以同時執行,亦可取決於先前的 Job 狀態依序執行。
- Step: 每個 Step 都是在相同的虛擬環境中執行,Step 可以執行指令或 Action。
- Action: 是 Workflow 中最小的可移植區塊。可以當成是一個打包好的腳本,每個人都可以建立自己的 Action 分享到 GitHub 社群。
# 特點
- 支援 Linux、macOS、Windows 或 Container
- 支援建置、測試和部署 Node.js、Python、Java、Ruby、PHP、Go、Rust、.NET 等等
- Matrix builds: 可在多個作業系統與執行階段版本間同時測試,進而節省時間
# 虛擬環境所含軟體
# 環境變數
# 加密變數
- 如果涉及金鑰甚至密碼等重要資訊,一定要使用加密變數!
- GitHub Actions 設定加密變數
由於設定值非常繁複,建議依自己的需求到 GitHub Docs 查詢。
以下是筆者每天用來執行一些 Python 腳本的設定檔,可以自行參考:
name: Login to website
on:
# push 到 master 分支時會觸發
push:
branches:
- master
# 排程每天 UTC 16:30 (台灣時間 0:30) 時觸發
# 語法可上 crontab.guru 查詢
schedule:
- cron: 30 16 * * *
jobs:
build:
name: Set up environment
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Python 3.8
uses: actions/setup-python@v1
with:
python-version: "3.8"
- name: Install dependencies
run: |-
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Login
env:
# 取得在 Secrets 所設定的加密變數
USERNAME: ${{ secrets.USERNAME }}
PASSWORD: ${{ secrets.PASSWORD }}
run: python main.py
設定完後放入 .github/workflows/檔案名稱.yml
,檔案名稱好記即可。
之後就可以切換到 [Actions] 分頁中看看如果觸發了前面 on:
設定的某事件 (push、排程時間等等) 後,有沒有正確執行吧!