上一篇我們使用 Discord Webhook 實現了基本的 CI/CD 通知功能,今天我將嘗試改用bot來進行,主要是因為bot相對來說功能上比較彈性,並且不僅僅只是單向的傳送,他可以做到雙向的互動,如果後續想要讓使用者對訊息做回覆或互動,就需要進一步的機制
Step 1:首先要寫一個能讓bot發送訊息的程式碼
async def on_ready():
print(f"✅ 已登入為 {bot.user}")
try:
# 獲取頻道(輸入頻道 ID)
channel = bot.get_channel(您的頻道ID)
if channel:
# 根據命令行參數發送不同訊息
status = sys.argv[1] if len(sys.argv) > 1 else "unknown"
if status == "success":
message = "🎉 CI/CD 測試成功!所有檢查通過。"
elif status == "failure":
message = "❌ CI/CD 測試失敗!請檢查錯誤。"
else:
message = "🤖 CI/CD 流程執行完成。"
await channel.send(message)
print(f"✅ 已發送訊息:{message}")
else:
print("❌ 無法找到頻道")
except Exception as e:
print(f"❌ 發送訊息時出錯:{e}")
finally:
await bot.close()
Step 2:在github secret中新增DISCORD_TOKEN
Step 3:接著修改workflow
- name: 📢 使用 Bot 發送通知
if: always()
env:
DISCORD_TOKEN: ${{ secrets.DISCORD_TOKEN }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
# 安裝額外依賴(如果需要的話)
pip install discord.py
# 根據執行狀態傳遞參數
if [ "${{ job.status }}" = "success" ]; then
python scripts/send_notification.py success
else
python scripts/send_notification.py failure
fi
Step 4:接著修改workflow的job
Step 5:運行程式碼看是否可以運作,接著推送至github
最後回到github可以查看pipeline
測試成功後bot也成功在discord傳送通知