GitHub Actions

GitHub Actions 是由 GitHub 提供的服務,用於在 GitHub 建置、測試、封裝、發佈或部署任何專案。並可藉此建置端對端 (end-to-end) CI/CD 功能,即持續整合/持續交付 (微軟譯為持續傳遞) 服務。

在筆者截稿前,GitHub Actions 仍在 Beta 階段,須先進行申請才可使用 https://github.com/features/actions

核心概念

  • 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 Secrets

由於設定值非常繁複,建議依自己的需求到 GitHub Help 查詢。

以下是筆者每天用來執行一些 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/[email protected]
    - name: Set up Python 3.7
      uses: actions/[email protected]
      with:
        python-version: '3.7'
    - 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、排程時間等等) 後,有沒有正確執行吧!