Skip to main content

在本地執行 Github Actions

延續上一篇文章 Github Actions 自動化 CI/CD,我們可以在本地執行 Github Actions 用於在本地先偵錯 Workflow 語法設定或是節省 Actions 額度。首先需要安裝 act 套件以及 docker,並且手動打開 docker 才能執行,他不會自己打開。

安裝

# Windows 使用 winget/choco
winget install nektos.act
choco install act-cli

# Macos
brew install act

用法

假設專案中已經設定好 workflow,應該位於 project_root/.github/workflows/*.yml,使用此命令來執行 job

act -j <job_id> -s VAR1=xxx -s VAR2=xxx
  • job_id 是你在 workflows 中設定的名稱
  • 使用 --list 參數可以列出所找到的所有 workflows

並且有以下幾個常用參數

  • --var 設定 repository variables,不知道這是啥的我上一篇文章有講
  • --env-file 設定多個 var 的 .env 檔案,預設 .env
  • -s, --secrets 用於設定敏感環境變數,
  • --secret-file 設定多個 secrets 的 .env 檔案,預設 .secrets
  • -W 用於指定檔案(s, 複數)
  • -e 指定 event.json,可用於跳過任務
  • --action-offline-mode 啟用快取

FAQ

  • macOS latest: 他不支援,但是如果你的電腦剛好就是 mac 可以使用 -P macos-latest=-self-hosted 執行。
  • 雖然官方文檔沒講清楚,但猜測 --var${{ var.xxx }} 設定的環境變數,而 --secrets 就是 ${{ secrets.xxx }} 設定的。執行時要記得加上 GITHUB_TOKEN 以取得 Github 相關服務,在這裡可以生成,選擇 classic 版本。
  • -P 參數可以選擇自己要的平台鏡像。
  • 如果要避免密碼被命令行紀錄,可以把環境變數以 .env 形式儲存在 .secrets 檔案中,或者在 act 指令前綴加上空格(不是所有終端都適用,測試 Zsh 可以 Bash 不行)。