iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0
自我挑戰組

用 Discord Bot 玩轉 DevOps系列 第 23

用BOT自動發 changelog(6)

  • 分享至 

  • xImage
  •  
def run_scheduler():
    """在背景執行排程(Render 環境優化版)"""
    # 清除所有現有排程
    schedule.clear()
    
    # 設定排程:每週一上午 9:00 執行(台灣時間 UTC+8)
    # Render 伺服器通常是 UTC 時間,所以換算成 UTC 時間
    schedule.every().monday.at("01:00").do(trigger_weekly_check)  # UTC 時間 01:00 = 台灣時間 09:00
    
    # 也可以添加測試排程(每小時執行一次,用於測試)
    schedule.every().hour.do(trigger_test_check)
    
    print("⏰ 排程器設定完成:每週一 01:00 UTC (09:00 UTC+8) 自動檢查")
    
    while True:
        schedule.run_pending()
        time.sleep(60)  # 每分鐘檢查一次排程

改成每周一發送報告

async def execute_scheduled_check():
    """執行排程的每周檢查"""
    print(f"🔍 執行排程每周檢查...")
    
    # 檢查上週的 PR(上週一到現在)
    last_monday = datetime.utcnow() - timedelta(days=7)  # 使用 UTC 時間
    since_date = last_monday.strftime("%Y-%m-%d")
    
    prs, error = get_merged_prs_since(since_date)
    
    if error:
        error_msg = f"❌ 自動檢查失敗: {error}"
        print(error_msg)
        if CHANGELOG_CHANNEL_ID:
            await send_changelog_to_channel(error_msg)
        return
    
    if prs:
        print(f"📝 發現 {len(prs)} 個上週合併的 PR")
        
        # 計算時間範圍
        start_date = last_monday.strftime("%Y-%m-%d")
        end_date = datetime.utcnow().strftime("%Y-%m-%d")
        
        changelog_content = f"📊 **每周更新報告 ({start_date} ~ {end_date})**\n\n"
        changelog_content += f"本周共合併了 **{len(prs)}** 個 PR\n\n"
        
        for pr in prs:
            pr_number = pr['number']
            pr_title = pr['title']
            pr_url = pr['html_url']
            author = pr['user']['login']
            merged_at = pr['pull_request']['merged_at']
            
            # 格式化時間
            merged_time = datetime.fromisoformat(merged_at.replace('Z', '+00:00'))
            formatted_time = merged_time.strftime("%m/%d")
            
            changelog_content += f"• [#{pr_number}]({pr_url}) {pr_title}\n"
            changelog_content += f"  👤 {author} | 📅 {formatted_time}\n\n"
        
        if CHANGELOG_CHANNEL_ID:
            success = await send_changelog_to_channel(changelog_content)
            if success:
                print("✅ 排程每周報告發送成功")
            else:
                print("❌ 排程每周報告發送失敗")
    else:
        print("📭 上週沒有新合併的 PR")
        if CHANGELOG_CHANNEL_ID:
            await send_changelog_to_channel("📭 上週沒有新合併的 PR")

進行檢查的作業並統整

成果如下: 於周一上午9:00準時發送報告
https://ithelp.ithome.com.tw/upload/images/20251006/20169329jCN9MAMlma.png
由於已將bot部署至render並透過uptimerobot每五分鐘進行監控,確保bot 24/7小時是上線的


上一篇
用BOT自動發 changelog(5)-部署(3)
下一篇
用BOT手動查看更新日誌
系列文
用 Discord Bot 玩轉 DevOps24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言