別再手動執行!讓 GitHub Actions 排程功能,解放你的開發時間

更新 發佈閱讀 11 分鐘

身為開發者,你的日常工作中是否充滿了各種重複性任務?像是:

  • 每天半夜要對正式站進行健康檢查。
  • 每週一早上需要產生一份數據報告。
  • 每個月要定期清理測試環境的暫存檔案。

這些任務雖然重要,但手動執行不僅耗時,也容易因為遺忘或人為疏失而出錯。如果能讓這些事自動在指定時間執行,那該有多好?

這就是 GitHub Actions 的排程功能 (on: schedule) 發揮作用的地方。它就像一個不知疲倦的助理,能 7x24 小時準確無誤地在預設時間執行你交辦的任何任務。這篇文章將帶你從零開始,學會如何設定排程,讓你把寶貴的時間專注在更有創造力的事情上。

什麼是 GitHub Actions 排程功能?

簡單來說,它允許你的 Workflow (工作流程) 不需要透過 pushpull_request 等手動事件觸發,而是根據你設定的時間表(例如「每天早上 8 點」或「每 15 分鐘」)自動執行。

這項功能非常適合處理那些有規律、週期性的維護型任務,例如:

  • 定期備份:每天將資料庫或重要設定檔備份到雲端儲存。
  • 自動測試:每晚對最新的開發版本進行完整的整合測試。
  • 產生報告:每週自動分析數據並產生報表。
  • 監控服務:定時檢查網站或 API 是否正常運作。
  • 同步資料:定期從外部來源拉取最新資料並更新到你的專案中。

設定排程的關鍵:認識 Cron 表達式

GitHub Actions 使用標準的 Cron 表達式 來定義排程時間。第一次看到它可能會覺得有點神秘,但其實它的結構非常有規律。一個 Cron 表達式由 5 個欄位組成,中間用空格分開,分別代表:

┌───────────── 分鐘 (0 - 59)
│ ┌───────────── 小時 (0 - 23)
│ │ ┌───────────── 每月第幾天 (1 - 31)
│ │ │ ┌───────────── 月份 (1 - 12)
│ │ │ │ ┌───────────── 每週星期幾 (0 - 6,其中 07 都代表星期日)
│ │ │ │ │
│ │ │ │ │
* * * * *

常用特殊字元:

  • *:代表「每一個」。例如在「分鐘」欄位使用 *,表示每一分鐘都會執行。
  • */n:代表「每 n (單位)」。例如在「小時」欄位使用 */2,表示每兩小時執行一次。
  • -:代表一個範圍。例如在「星期幾」欄位使用 1-5,表示從星期一到星期五。
  • ,:代表列舉。例如在「小時」欄位使用 8,12,18,表示在早上 8 點、中午 12 點和下午 6 點執行。

幾個簡單的例子:

Cron 表達式說明

*/15 * * * *

每 15 分鐘執行一次。

0 8 * * *

每天早上 8:00 執行。

0 22 * * 1-5

每週一至週五的晚上 22:00 執行。

30 5 1 * *

每個月 1 號的凌晨 5:30 執行。

⚠️ 重要提醒:UTC 時區 GitHub Actions 的所有排程都使用 世界標準時間 (UTC)。台灣時間 (CST) 比 UTC 快 8 小時。所以,如果你想在台灣時間早上 9 點執行,你需要設定為 UTC 時間凌晨 1 點 (0 1 * * *)。

記不住 Cron 語法?推薦一個超好用的線上工具 Crontab Guru,它可以幫你產生及驗證 Cron 表達式,並清楚地告訴你它代表的時間。

如何建立你的第一個排程 Workflow

現在,讓我們動手建立一個實際的排程任務吧!

步驟 1:建立 Workflow 的 YAML 檔案

在你的專案根目錄下,找到或建立 .github/workflows/ 資料夾,並在裡面新增一個 YAML 檔案,例如 scheduled-task.yml

步驟 2:定義 schedule 觸發器

在 YAML 檔案中,使用 on:schedule: 來定義你的排程。

# .github/workflows/scheduled-task.yml
name: My Scheduled Task

on:
schedule:
# 使用 cron 語法設定排程
# 這個範例是設定在每天的 UTC 時間 5:30 執行
- cron: '30 5 * * *'

步驟 3:撰寫工作內容 (Jobs)

定義好觸發時間後,接下來就是在 jobs 中設定要執行的具體任務。

範例 1:每日網站健康檢查

這個範例會每天 UTC 時間的午夜 0 點,使用 curl 指令檢查你的網站是否能正常回傳 200 OK。

# .github/workflows/daily-health-check.yml
name: Daily Website Health Check

on:
schedule:
# 每天午夜 (UTC) 執行
- cron: '0 0 * * *'

jobs:
health-check:
runs-on: ubuntu-latest
steps:
- name: Check the website status
# 將 https://your-website.com 換成你的網站網址
run: |
response=$(curl -s -o /dev/null -w "%{http_code}" https://your-website.com)
if [ "$response" -eq 200 ]; then
echo "Website is up and running!"
else
echo "Website is DOWN! HTTP status code: $response"
exit 1 # 讓 Action 執行失敗以發出警報
fi

範例 2:每週產生數據報告

這個範例更進階一點,它會在每週一早上 9 點 (UTC) 執行一個 Python 腳本來產生報告,並將報告自動 commit 回你的專案庫。

# .github/workflows/weekly-report.yml
name: Generate Weekly Report

on:
schedule:
# 每週一早上 9:00 (UTC) 執行
- cron: '0 9 * * 1'
# 加上 workflow_dispatch 讓我們可以手動觸發測試
workflow_dispatch:

jobs:
build-report:
runs-on: ubuntu-latest
steps:
# 步驟 1: 取得專案的程式碼
- name: Checkout repository
uses: actions/checkout@v3

# 步驟 2: 設定 Python 環境
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'

# 步驟 3: 安裝腳本需要的套件
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt

# 步驟 4: 執行你的 Python 腳本來產生報告
- name: Run script to generate report
run: python scripts/generate_report.py

# 步驟 5: 使用現成的 Action 將變更 (新產生的報告) 自動 commit
- name: Commit and push if it changed
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: "docs: Auto-generate weekly report"
# 可以指定要 commit 的檔案,例如報告檔案
file_pattern: reports/*.csv

重要注意事項與最佳實踐

  1. 加上 workflow_dispatch:如範例 2 所示,強烈建議在 schedule 旁加上 workflow_dispatch:。這讓你可以從 GitHub 網站的 Actions 頁面手動觸發這個 workflow,方便你隨時測試和除錯,而不用苦苦等待排程時間到來。 [圖片:GitHub Actions 頁面,一個 workflow 右上角有 "Run workflow" 的按鈕]
  2. 執行時間可能延遲:GitHub 不保證你的排程會在「精準」的那個時間點執行。它會在排程時間將你的工作加入佇列,實際執行時間可能會因當時 GitHub 伺服器的負載而有幾分鐘的延遲。因此,它不適合需要秒級精準度的任務。
  3. 注意 Actions 的使用額度:對於公開專案,GitHub Actions 是免費的。但對於私有專案,則有每月免費的使用分鐘數限制。過於頻繁的排程(例如每分鐘執行)可能會快速消耗你的額度。
  4. 查看執行紀錄:你可以在專案的「Actions」分頁中看到所有排程的執行紀錄。你可以透過事件類型 (event:schedule) 來篩選,方便查看。

結論

GitHub Actions 的排程功能是一個強大卻容易上手的工具。透過簡單的 Cron 設定,你就能將無數的例行公事交給電腦自動處理。這不僅能確保任務的準時與一致性,更能將你從重複的勞動中解放出來。

現在就動手試試看,思考一下你的專案中有哪些任務可以被自動化,讓你的程式碼,即使在你睡覺的時候,也能為你辛勤工作吧!

留言
avatar-img
留言分享你的想法!
avatar-img
slash hsu的沙龍
1會員
5內容數
嗨,我是slash,平常喜歡記錄生活,也熱衷於學習與自我成長。這裡會分享一些工作上的反思、學習過程中的筆記,還有日常生活中的觀察與靈感。希望這些內容能帶給你共鳴或啟發,也歡迎留言交流,一起在生活中找到前進的動力。
你可能也想看
Thumbnail
自由接案好像很自由、容易,卻需要點方向的指引,希望這篇的分享能給予你一些幫助。
Thumbnail
自由接案好像很自由、容易,卻需要點方向的指引,希望這篇的分享能給予你一些幫助。
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
這篇文章描述了作者從兼職開發轉為全職開發的過程,並分享了從混進學界指日可待的積極態度。作者也提及自己在專案製作與個人生活上的矛盾與感想,最後分享了專案管理和敏捷開發相關的文章與影片。
Thumbnail
這篇文章描述了作者從兼職開發轉為全職開發的過程,並分享了從混進學界指日可待的積極態度。作者也提及自己在專案製作與個人生活上的矛盾與感想,最後分享了專案管理和敏捷開發相關的文章與影片。
Thumbnail
透過 Google Sheets 和 Make 打造專案任務自動提醒系統,當一到專案任務重要時程,系統便自動寄發專案任務的提醒信件或行事曆邀請,給專案任務負責人和相關團隊成員,確保專案進度如期完成,有效提升跨部門溝通協作效率!不再花費時間人工追蹤時程進度,釋放時間及專注力,專注在更重要的工作上!
Thumbnail
透過 Google Sheets 和 Make 打造專案任務自動提醒系統,當一到專案任務重要時程,系統便自動寄發專案任務的提醒信件或行事曆邀請,給專案任務負責人和相關團隊成員,確保專案進度如期完成,有效提升跨部門溝通協作效率!不再花費時間人工追蹤時程進度,釋放時間及專注力,專注在更重要的工作上!
Thumbnail
放鬆的週末,我與幾位同事決定提升我們的後端開發技巧,選擇了「日期範圍生成器」作為我們的小型實作。作為團隊中較有經驗的PHP工程師,我引領著團隊從基礎程式碼的撰寫開始,進而深入到物件導向的結構調整,最後提高程式可擴充性的挑戰。雖然過程中遇到不少困難,但我們通過不斷的討論和優化,最終成功克服了所有挑戰。
Thumbnail
放鬆的週末,我與幾位同事決定提升我們的後端開發技巧,選擇了「日期範圍生成器」作為我們的小型實作。作為團隊中較有經驗的PHP工程師,我引領著團隊從基礎程式碼的撰寫開始,進而深入到物件導向的結構調整,最後提高程式可擴充性的挑戰。雖然過程中遇到不少困難,但我們通過不斷的討論和優化,最終成功克服了所有挑戰。
Thumbnail
這篇文章探討了在專案開發中遇到的時間壓力和執行困難,以及如何無效應對這些挑戰。 沒有工時估算、客戶溝通、交付時間表設定、程式品質管理、工作量管理、合同和專業態度等方面的建議。
Thumbnail
這篇文章探討了在專案開發中遇到的時間壓力和執行困難,以及如何無效應對這些挑戰。 沒有工時估算、客戶溝通、交付時間表設定、程式品質管理、工作量管理、合同和專業態度等方面的建議。
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News