快轉到主要內容
  1. Posts/

GitHub Actions 自動化工作流程

DevOps GitHub Python GitHub Actions CI/CD Python 爬蟲 PTT Slack Automation
目錄

GitHub Actions 自動化工作流程
#

目標
#

利用 GitHub Actions實現自動化流程,執行測試、部署等任務。這裡的範例是設計一個自動化程式,每天抓取PTT股票版的前十頁,將標題分類為「標的」或「Re:標的」,並每8小時透過Slack發送通知。

前期準備
#

你可以創建一個自己的 GitHub 儲存庫,或者直接使用我提供的 PTT 股票版爬蟲 儲存庫。該專案已經集成了Slack 通知功能。

  • 如果需要使用 Slack,請參照其他教學來取得 SLACK_WEBHOOK
  • 若不打算使用 Slack,則可以根據需要,修改 python-app.yaml 和 main.py 文件,讓程式不涉及 Slack 通知。

首先,你可以使用以下命令來 Fork 或 clone 此儲存庫:

git clone https://github.com/a607ernie/Ptt-Stock-Data

如果你希望每次執行完程式後將更新推送到 main 分支,則需要申請一個 Personal Access Token 來授權自動提交。

申請 Personal Access Tokens
#

請按照以下步驟生成你的 Personal Access Token:

  1. 在 GitHub 首頁點擊右上角的使用者頭像,選擇「Settings」。
  2. 在左側選單中選擇「Developer settings」,接著進入「Personal access tokens」。
    Image
  3. 點擊「Generate new token」,並勾選以下兩個權限:
  • repo
  • workflow

生成 Token 之後,請將其複製並保存在安全的地方,因為將無法再次查看它。

設定儲存庫的 Token
#

如果需要使用 Slack 通知,也可以在此步驟中將 SLACK_WEBHOOK 設定到儲存庫的密鑰中。

得到 Personal Access Token 後,我們接下來要將此 Token 設定到你的 GitHub 儲存庫中。請遵循以下步驟:

  1. 進入 PTT 股票版爬蟲 儲存庫。
  2. 點擊「Settings」,然後選擇「Secrets and variables」>「Actions」。
    Image
  3. 點擊右上角的「New repository secret」,並填寫以下欄位:
  • Name:例如填入 GIT_TOKEN
  • Secret:貼上之前複製的 Personal Access Token
    Image

設定 Repository Permissions
#

若你希望推送提交,你需要允許 GitHub Actions 擁有「讀寫」權限。

  1. 進入 PTT 股票版爬蟲 儲存庫。
  2. 點擊「Settings」>「Actions」>「General」,然後找到「Workflow permissions」。
  3. 設定為「Read and write permissions」,並儲存變更。
    Image

建立 GitHub Actions 工作流程
#

如果你不需要 Slack 通知功能,可以註解掉在 .env 中的設定。

在 GitHub 儲存庫中,我們需要建立一個工作流程來自動化執行。你可以在儲存庫中選擇「Actions」頁面,或手動建立 .github/workflows 目錄並添加一個 YAML 配置文件。

以下是一個範例的工作流程 YAML 文件:

name: Run PTT Stock Scraper

on:
  # 設定工作流程定時執行。這裡設定每八小時執行一次
  schedule:
    - cron:  '0 */8 * * *'
  # 若需要手動觸發工作流程,可以使用以下配置
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    # 檢出源碼
    - uses: actions/checkout@v3
    
    # 設定 Python 3.10 環境
    - name: Set up Python 3.10
      uses: actions/setup-python@v3
      with:
        python-version: "3.10"
    
    # 安裝依賴
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
                
    # 執行 Python 程式
    - name: Run python file
      run: python3 main.py
      env:
        SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
    
    # 提交變更
    - name: Commit changes
      continue-on-error: true
      run: |
        git config --global user.email ${{ secrets.CI_COMMIT_EMAIL }}
        git config --global user.name ${{ secrets.CI_COMMIT_AUTHOR }}
        git add .
        git commit -m "Log: Update stock information from PTT"        

    # 推送提交
    - name: Push changes
      if: success()
      uses: ad-m/github-push-action@master
      with:
        github_token: ${{ secrets.GIT_TOKEN }}

本地運行 (不使用 Slack)
#

若你不打算啟用 Slack 通知功能,可以在 main.py 中註解掉 Slack 通知的部分,範例如下:

if __name__ == '__main__':
    ...
    # 註解掉以下這行來禁用 Slack 通知
    # slack_notify(result)

本地運行 (使用 Slack)
#

若你希望在本地運行程式並啟用 Slack 通知,則需修改 main.py,將 prod 設定區塊註解,並使用 test 區塊代替。此時,你需要在本地建立 .env 文件來設置必要的環境變數。

# test .ENV
# 用於本地開發環境
config = dotenv_values(".env")
SLACK_WEBHOOK = config['SLACK_WEBHOOK']

# prod .ENV
# 用於 GitHub Actions 或生產環境
# SLACK_WEBHOOK = os.getenv('SLACK_WEBHOOK')

就可以在本地開發環境中運行程式並發送 Slack 通知了。

結論
#

透過 GitHub Actions,你可以輕鬆實現自動化的爬蟲運行和結果推送,不僅能自動抓取 PTT 股票版的資訊,還能將結果定時推送至 Slack,以提供即時的資訊。這個流程不僅限於此範例,你可以根據需求擴展其應用場景。

Ernie
作者
Ernie

相關文章

利用 Slack Webhook 建立自動化通知系統
Python Notification Webhook Slack Automation Slack Webhook Python Notification GitHub Actions
利用 Slack Webhook 建立自動化通知系統,提升團隊協作效率。
GitHub Webhook 自動化程式碼部署教學
DevOps GitHub Python Flask GitHub Webhook 自動化 部署 Python Flask Git SSH
設定 GitHub Webhook 自動拉取最新程式碼並部署到伺服器。
使用 exchangelib 和 BeautifulSoup 自動化處理郵件
Python Automation Exchangelib BeautifulSoup Python Automation Database
使用 exchangelib 和 BeautifulSoup 從郵件提取資料並存入資料庫