上一篇用GitHub Actions成功跑出一個最簡單的 Hello World workflow後,大致上了解Workflow 是怎麼被觸發的還有他是在哪裡執行,現在要做的是將pipeline的結果傳送到外部,實現自動化回饋的機制,我會使用一個很常見的工具叫webhook來做初步的嘗試
Webhook 是一種「被動式」的訊息傳遞機制。它讓一個系統在事件發生時,自動把資料推送(push)到另一個系統,而不是另一個系統要不斷「主動查詢(polling)」有沒有新事件
例如說:
LINE Bot / Discord Bot
當有人傳訊息給 Bot,LINE 或 Discord 的伺服器就會透過 Webhook,把使用者的訊息推送到你設定好的伺服器。
金流系統(例如綠界 / 藍新)
當用戶付款成功,金流平台會用 Webhook 通知你的伺服器「這筆訂單付款完成了」。
Step 1:在discord中找到「建立webhook」
Step 2:建立好後點選複製網址
Step 3:接著來到github將剛剛複製的網址貼入secret中
Step 4:然後就可以開始寫workflow
name: 🤖 Discord Bot CI/CD Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
code-quality:
name: ✅ 程式碼品質檢查
runs-on: ubuntu-latest
steps:
- name: 📦 獲取程式碼
uses: actions/checkout@v4
- name: 🐍 設定 Python 3.10
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: 📦 安裝依賴套件
run: |
python -m pip install --upgrade pip
pip install discord.py python-dotenv
echo "✅ 依賴安裝完成"
- name: 🔍 Python 語法檢查
run: |
python -m py_compile bot.py
echo "✅ 語法檢查通過"
- name: 🧪 模組導入測試
run: |
# 只測試基礎導入,不觸發需要 Token 的功能
python -c "
import discord
from discord.ext import commands
print('✅ 基礎模組導入成功')
"
echo "✅ 導入測試完成"
- name: 📢 發送 Discord 通知
if: always() # 無論成功失敗都發送
run: |
# 使用簡單英文訊息避免編碼問題
if [ "${{ job.status }}" = "success" ]; then
MESSAGE="🎉 CI/CD Success! All tests passed. By ${{ github.actor }}"
else
MESSAGE="❌ CI/CD Failed! Please check errors. By ${{ github.actor }}"
fi
# 發送到 Discord Webhook
curl -X POST \
-H "Content-Type: application/json" \
-d "{\"content\": \"$MESSAGE\"}" \
"${{ secrets.DISCORD_WEBHOOK }}"
# 根據執行狀態傳遞參數
if [ "${{ job.status }}" = "success" ]; then
python scripts/send_notification.py success
else
python scripts/send_notification.py failure
fi
以上是以github提供的模板去做修改,添加了語法檢查、安全導入測試、以及結果整合通知