iT邦幫忙

0

[Day 03]GitHub Actions - .github/workflows 說明

  • 分享至 

  • xImage
  •  

YML 設定檔重點與邏輯解析

  • 根目錄限制:資料夾必須建立在專案的最外層。
  • 隱藏資料夾:第一層必須命名為 .github(特別強調前面的小數點不可漏掉)。
  • 工作流程資料夾:第二層必須命名為 workflows(特別強調字尾的 s)。
  • YAML 檔案:將你的設定檔(例如 monitor.yml)放置於此目錄下。

A. 觸發條件 (Triggers)

我們要告訴 GitHub 什麼時候該派出抓取情資。建議使用「雙軌制」觸發機制:

  • 定時排程 (schedule):透過 Cron 語法來設定執行時間。由於 GitHub 伺服器使用的是 UTC 時間,要換算成台灣時間 (GMT+8) 需要減去 8 小時。設定為 0 23,0,4,5 * * *,代表系統會在台灣時間的每天 07:00、08:00、12:00 與 13:00 自動啟動。
  • 手動觸發 (workflow_dispatch):這個設定允許我們在開發或除錯階段,隨時從 GitHub 後台手動點擊按鈕來觸發腳本執行。

B. 儲存庫讀寫權限 (Permissions)

為了讓自動化機器人能將收集到的情資寫回我們的專案中,必須正確配置權限。這需要完成兩層設定:

  • YML 檔案宣告:在設定檔中加入 permissions: contents: write,宣告機器人具備寫入內容的權限。
  • GitHub 後台開啟:請依序前往儲存庫的 Settings > Actions > General > Workflow permissions。在這裡必須確保勾選「Read and write permissions」並儲存設定,才能真正獲得可寫入權限。

C. 機密資訊注入 (Secrets)

在 Day2 我用了郵件預警功能,在執行 python main.py 階段,安全地將前置作業準備好的 MAIL_USERNAMEMAIL_PASSWORDMAIL_TO 透過 GitHub Secrets 注入為環境變數,確保敏感的應用程式密碼不會直接暴露在程式碼中。

D. 執行核心系統 (Core Execution)

前置作業完成後,最後就是讓系統啟動並執行我們的 Python 程式:

  • 環境建置與快取:系統會啟動最新版的 Ubuntu 環境 (ubuntu-latest),安裝 Python 3.10。接著會自動安裝 requestsbeautifulsoup4feedparserplaywright 等必備套件。
  • 核心調度:執行 python main.py。這支程式是整套監控系統的核心調度程式,負責串聯資料抓取、過濾、分析到發送警報的完整自動化生命週期。
  • 狀態更新與備份:執行完畢後,腳本會透過 Git 指令將更新後的狀態檔 (last_seen.json)、原始抓取紀錄 (raw_discovery.csv)、預警發送紀錄 (alert_history.log) 以及 Markdown 報表資料夾 (history_logs/*.md) 提交並推送回 GitHub。
  • 防無限迴圈機制:在自動 Commit 時,特別在訊息中加入了 [skip ci] 標籤。這個小細節非常重要,它能防止這次的自動推送再次觸發 GitHub Actions,避免系統陷入無窮無盡的執行迴圈。

環境建置與效能優化

  • Python 與套件安裝:基於 ubuntu-latest 環境,指定 Python 3.10,並自動安裝爬蟲必備的 requestsbeautifulsoup4feedparserplaywright 套件。
  • 快取機制 (Caching):這是非常棒的建置重點!你特別加入了 Playwright 瀏覽器的快取 (actions/cache@v4) 以及 Python pip 快取,這能大幅縮短每次 Action 啟動的等待時間並節省免費的運算資源。

自動化狀態儲存 (Git Push)

  • 資料持久化:腳本執行完畢後,會自動設定 Git 身分,並將更新後的狀態檔 last_seen.json、原始資料、報表資料夾 history_logs/*.md 追蹤並寫回儲存庫。
  • 防呆與迴圈防護:利用 git diff --staged --quiet 判斷是否真的有新變更才進行 Commit,並且在 Commit 訊息中加入 [skip ci],這是一個重要的防護機制,能防止這次自動推送意外再次觸發 GitHub Actions 造成無限迴圈。

*提醒邦友,使用第三方服務/API 時,請務必評估資安風險與隱私保護
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言