發生問題時如何追蹤 & 查詢
當 GitHub Action 執行過程中發生問題了,有幾個方式可以查詢:
上 GitHub Actions 頁面查看 log
若需要詳細一點的 log,可以下載 log archive
若希望可以有 debug level 的 log,則可以到 repository 的
Settings >> Secrets中,加入ACTIONS_RUNNER_DEBUG&ACTIONS_STEP_DEBUG兩個環境變數,並設定為true
關於 Action 的引用
可以使用已經公開的 public action repository
可以透過 branch、tag、commit 來指定 action 的版本
Event
pull_request
on: [pull_request]在預設情況下,只會在 pull request 狀態是open、synchronize,reopened的時候被觸發,其他狀態並不會被觸發(例如:closed)若要指定在其他狀態也同時要觸發,可以使用
types關鍵字來明確定義 (參考下方文件,搜尋types:就可以找到相關資料了)
參考資料
Scheduler
可以使用 crontab guru 來設計一個精準的 crontab 設定
設定的時間會以
UTC時間為基準最短僅能設定到每 5 分鐘執行一次
crontab 設定內容要用
單引號包起來,用雙引號會沒作用….(這個真的很雷…)
從外部觸發 workflow
當自動化相關程式寫好後,需要從外部觸發其實是稀鬆平常的事情,而 GitHub Actions 則提供了 workflow_dispatch & repository_dispatch 兩種方式來達成外部觸發 workflow 的目的。
由於一個 repository 中可以有多個 workflow;如果只要特定的 workflow,使用
workflow_dispatch;但若要觸發所有的 workflow,那就使用repository_dispatch要送出一個標準的 HTTP POST request 觸發 repository dispatch(送到
https://api.github.com/repos/[USER_NAME]/[REPO_NAME]/dispatches),需要帶上三個 header 資訊,如下圖- Accept:
application/vnd.github.v3+json - Content-Type:
application/json - Authorization:
Bearer [GITHUB_TOKEN]其中 Authorization 的部份也可以換成
Basic [bases64 編碼後的內容](編碼的內容使用Username:[GITHUB_TOKEN] | base64語法產生,不過要把最後面的o=換成==)
- Accept:
透過
event_type關鍵字({ "event_type": "build" }),可以把 type 的資訊送入 GitHub Action 中,藉由比對在 github action YAML 設定檔中的 type 參數,來觸發對應的 workflow若要額外帶上其他 key/value 的參數,可以透過在 request body 中加上
client_payload來完成(不能使用其他名稱,詳細說明可參考官網文件說明),在 action 中可以透過${{ github.event.client_payload.[DATA_KEY] }}取得
過濾指定目標所發生的事件
除了可以指定各種 event 發生時觸發 workflow 外,也可以指定在特定的目標上發生變更的時候才觸發 workflow,而這目標可以是
branches、tags、paths… 等等也可以透過
branches-ignore、tags-ignore、paths-ignore… 等等來做反向的設定細部的 filter 條件可以參考官網文件的 cheat sheet 說明