影刀RPA GitHub Actions自动化:CI-CD流水线自运维

发布时间:2026/7/10 10:41:15

影刀RPA GitHub Actions自动化:CI-CD流水线自运维
影刀RPA GitHub Actions自动化CI/CD流水线自运维作者林焱 | 适用人群影刀RPA新手 | 难度★★★☆☆一、什么情况用这个团队用GitHub Actions跑CI/CD每天早上第一件事就是打开GitHub看昨晚的构建有没有挂、测试有没有失败。挂了还得手动触发重跑——一天中最浪费时间的例行公事。用影刀RPA定时拉取GitHub Actions运行状态 → 汇总成日报 → 构建失败自动重试 → 通过企微/钉钉推送给团队。你只管打开消息看一眼别的机器人帮你干了。实际场景开发团队的CI/CD状态监控、开源项目的自动化运维、多仓库构建状态统一汇总。这篇文章能解决的问题调用GitHub API查询Actions运行状态自动汇总多个仓库的构建结果构建失败自动触发重跑生成每日CI/CD健康报告二、怎么做2.1 准备GitHub Token拼多多店群自动化上架方案在GitHub → Settings → Developer settings → Personal access tokens → Generate new token (classic)勾选repo和workflow权限。2.2 影刀主流程┌──────────────────────────────────────────────┐ │ ① 【执行Python代码】 │ │ 调用GitHub API拉取所有仓库的Actions状态 │ │ ↓ │ │ ② 【执行Python代码】 │ │ 汇总统计成功/失败/进行中的数量 │ │ ↓ │ │ ③ 【遍历列表】 │ │ 对失败的workflow自动重跑 │ ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/47e15723fe9449e4b0dd17ebe28640fb.png#pic_center) │ ↓ │ │ ④ 【写入Excel】 │ │ 生成CI/CD日报 │ │ ↓ │ │ ⑤ 【发送企业微信消息】 │ │ 推送汇总通知 │ └──────────────────────────────────────────────┘2.3 核心代码步骤①查询Actions运行状态importrequestsimportjsonfromdatetimeimportdatetime,timedelta# 配置 GITHUB_TOKENghp_xxxxxxxxxxxx# 你的Personal Access TokenHEADERS{Authorization:ftoken{GITHUB_TOKEN},Accept:application/vnd.githubjson,}# 要监控的仓库列表REPOS[myorg/frontend-app,myorg/backend-api,myorg/data-pipeline,]defget_latest_workflow_runs(owner,repo,since_hours24):获取仓库最近的workflow运行记录urlfhttps://api.github.com/repos/{owner}/{repo}/actions/runs# 筛选最近24小时的运行since(datetime.utcnow()-timedelta(hourssince_hours)).isoformat()Zparams{per_page:50,# 每页最多50条created:f{since},}responserequests.get(url,headersHEADERS,paramsparams,timeout30)ifresponse.status_code!200:print(f查询失败{repo}→{response.status_code}{response.text})return[]dataresponse.json()runsdata.get(workflow_runs,[])# 提取关键信息result[]forruninruns:result.append({repo:f{owner}/{repo},workflow_name:run.get(name,),run_id:run.get(id),status:run.get(status),# queued/in_progress/completedconclusion:run.get(conclusion),# success/failure/cancelledbranch:run.get(head_branch,),trigger:run.get(event,),# push/pull_request/schedulecreated_at:run.get(created_at,),url:run.get(html_url,),})returnresult# 批量查询 all_runs[]forrepoinREPOS:owner,repo_namerepo.split(/)runsget_latest_workflow_runs(owner,repo_name)all_runs.extend(runs)print(f{repo}: 查到{len(runs)}条运行记录)outputjson.dumps(all_runs,ensure_asciiFalse)步骤②汇总统计importjsonfromdatetimeimportdatetime runsjson.loads(all_runs_data)# 从上一步传入# 分类统计stats{success:0,failure:0,cancelled:0,in_progress:0,queued:0,failed_runs:[],# 失败的详情}forruninruns:ifrun[status]completed:conclusionrun.get(conclusion,unknown)ifconclusioninstats:stats[conclusion]1ifconclusionfailure:stats[failed_runs].append(run)else:ifrun[status]instats:stats[run[status]]1# 生成汇总报告report{report_time:datetime.now().strftime(%Y-%m-%d %H:%M:%S),total_runs:len(runs),success:stats[success],failure:stats[failure],cancelled:stats[cancelled],in_progress:stats[in_progress],failed_details:stats[failed_runs],}summaryjson.dumps(report,ensure_asciiFalse)print(f成功:{stats[success]}失败:{stats[failure]}进行中:{stats[in_progress]})步骤③自动重跑失败的workflowimportrequestsimportjsonimporttime GITHUB_TOKENghp_xxxxxxxxxxxxHEADERS{Authorization:ftoken{GITHUB_TOKEN},Accept:application/vnd.githubjson,}defrerun_workflow(owner,repo,run_id):重新运行失败的workflowurlfhttps://api.github.com/repos/{owner}/{repo}/actions/runs/{run_id}/rerunresponserequests.post(url,headersHEADERS,timeout30)ifresponse.status_code201:return{success:True,message:f重跑成功:{owner}/{repo}run#{run_id}}else:return{success:False,message:f重跑失败:{status_code}{response.text[:200]},}# 从失败列表重跑 failed_runsreport.get(failed_details,[])rerun_results[]forruninfailed_runs:partsrun[repo].split(/)owner,repoparts[0],parts[1]resultrerun_workflow(owner,repo,run[run_id])rerun_results.append(result)# GitHub API有速率限制重跑之间间隔1秒time.sleep(1)rerun_outputjson.dumps(rerun_results,ensure_asciiFalse)print(f请求重跑{len(failed_runs)}个失败的workflow)步骤④⑤生成日报并推送影刀中【写入Excel】 Sheet1「运行概览」→ 写入stats汇总数据 Sheet2「失败详情」→ 写入failed_runs列表 Sheet3「重跑结果」→ 写入rerun_results 【发送企业微信消息】 Markdown格式 GitHub CI/CD 日报{report_time} 总运行数{total_runs} ✅ 成功{success} ❌ 失败{failure}已自动重跑 ⏳ 进行中{in_progress} 失败详情 {每条失败记录的仓库workflow名称链接}三、有什么坑坑1GitHub API速率限制未认证的请求每小时只能60次使用Token后可以到5000次/小时。但如果你监控几十个仓库查询频率高的话还是可能超限。应对措施defcheck_rate_limit():检查API剩余配额urlhttps://api.github.com/rate_limitresponserequests.get(url,headersHEADERS)dataresponse.json()remainingdata[rate][remaining]reset_timedata[rate][reset]ifremaining100:print(f⚠️ API配额即将耗尽剩余{remaining}次重置时间{reset_time})![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a09f0e4b1cf7400d8b520d18881383f1.png#pic_center)returnFalsereturnTrue# 在批量查询前检查ifnotcheck_rate_limit():print(配额不足跳过本次执行)exit()坑2workflow可能不存在或改名仓库改名、workflow文件删除后API返回的workflow列表可能意想不到TEMU店群如何管理运营defget_workflow_runs_safe(owner,repo):安全查询处理异常try:returnget_latest_workflow_runs(owner,repo)exceptrequests.exceptions.Timeout:print(f超时{owner}/{repo})return[]exceptExceptionase:print(f未知错误{owner}/{repo}-{e})return[]坑3重跑幂等性问题有些workflow不支持重复运行比如已经合并的PR的workflow重跑会报错。处理方式ifresponse.status_code403:# 403可能是不允许重跑权限问题或workflow状态不允许return{success:False,message:f不允许重跑可能已合并或关闭}elifresponse.status_code422:# 422通常是状态不允许return{success:False,message:workflow状态不允许重跑}坑4多个workflow同时重跑导致排队GitHub Actions有并发限制一次性重跑10个workflow可能导致后面几个排队很久。加上并发控制importconcurrent.futures# 最多同时重跑3个withconcurrent.futures.ThreadPoolExecutor(max_workers3)asexecutor:futures[]forruninfailed_runs:fexecutor.submit(rerun_workflow,...)futures.append(f)forfinconcurrent.futures.as_completed(futures):print(f.result())坑5Token权限不够如果用的是Fine-grained token细粒度令牌需要确保勾选了目标仓库权限包含Actions: Read and Write用Classic token更简单勾上repo和workflow就行。总结影刀 GitHub Actions API 让CI/CD监控从「人工刷新网页」变成「机器人自动巡检 自动重试 定时推送」。关键是控制API调用频率、处理重跑的边界情况、Token权限配足。

相关新闻

MATLAB 二维绘图进阶:利用 Line 对象属性实现 3 种动态曲线更新

MATLAB 二维绘图进阶:利用 Line 对象属性实现 3 种动态曲线更新

2026/7/10 10:31:14

MATLAB 二维绘图进阶:利用 Line 对象属性实现 3 种动态曲线更新 在数据可视化和交互式图形界面开发中,动态更新曲线是一项常见需求。传统方法往往通过反复调用 plot 函数实现,这不仅效率低下,还会导致图形闪烁。本文将深入探讨如…

3步实现Postman免安装:Windows系统终极便携版完整指南

3步实现Postman免安装:Windows系统终极便携版完整指南

2026/7/10 10:31:14

3步实现Postman免安装:Windows系统终极便携版完整指南 【免费下载链接】postman-portable 🚀 Postman portable for Windows 项目地址: https://gitcode.com/gh_mirrors/po/postman-portable 还在为每次重装系统都要重新配置API测试环境而烦恼吗&…

DeepSeek自研AI推理芯片:技术原理与产业影响分析

DeepSeek自研AI推理芯片:技术原理与产业影响分析

2026/7/10 10:31:14

当一家AI公司开始自研芯片,这往往不是技术炫技,而是生存压力的直接体现。DeepSeek作为中国大模型领域的重要玩家,近期被曝出正在自主研发AI推理芯片,这一动作背后折射出的正是当前中国AI产业面临的严峻现实:在美国出口…

大数据毕设项目:基于 SpringBoot+Hadoop 的手机销售趋势预测分析系统的设计与实现 手机电商销售大数据分析系统 (源码+文档,讲解、调试运行,定制等)

大数据毕设项目:基于 SpringBoot+Hadoop 的手机销售趋势预测分析系统的设计与实现 手机电商销售大数据分析系统 (源码+文档,讲解、调试运行,定制等)

2026/7/10 12:01:33

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

IDA Pro 7.7 实战:Lab05-01.dll 恶意代码 5 大关键行为逆向剖析

IDA Pro 7.7 实战:Lab05-01.dll 恶意代码 5 大关键行为逆向剖析

2026/7/10 12:01:33

IDA Pro 7.7 深度逆向:Lab05-01.dll 恶意代码行为全息解析 1. 恶意代码样本概览与逆向工程方法论 Lab05-01.dll 是一个典型的 Windows 动态链接库型恶意代码样本,其设计精巧地隐藏了多种恶意功能模块。通过 IDA Pro 7.7 的静态分析,我们可以…

从大型机到云原生-云计算大数据与虚拟化技术全景解读

从大型机到云原生-云计算大数据与虚拟化技术全景解读

2026/7/10 12:01:33

从大型机到云原生 — 云计算、大数据与虚拟化技术全景解读 你想过没有,为什么我们如今可以用几行代码就让成千上万台服务器跑起来?为什么一个手机 App 背后可能连接着价值数十亿的计算资源池?这篇文章,带你从头梳理云计算、大数据…

AI助手限制应对指南:合规解锁与高效沟通四步法

AI助手限制应对指南:合规解锁与高效沟通四步法

2026/7/10 12:01:33

1. 项目概述:当AI助手说“不”时,我们如何优雅地“对话”?最近在折腾各种AI助手时,你肯定遇到过这样的场景:满怀期待地输入一个问题,结果屏幕上弹出一个冷冰冰的提示框——“此功能在您所在区域不可用”、“…

Claude Code生成可测试代码的终极范式:TDD驱动Prompt设计+自动stub注入,1小时重构遗留模块

Claude Code生成可测试代码的终极范式:TDD驱动Prompt设计+自动stub注入,1小时重构遗留模块

2026/7/10 12:01:33

更多请点击: https://codechina.net 第一章:Claude Code生成可测试代码的终极范式:TDD驱动Prompt设计自动stub注入,1小时重构遗留模块 当面对一个无测试覆盖、高耦合的遗留Go模块时,传统重构常陷入“改一行崩三处”的…

闲鱼自动化运营终极指南:告别重复操作,轻松管理多账号

闲鱼自动化运营终极指南:告别重复操作,轻松管理多账号

2026/7/10 11:51:33

闲鱼自动化运营终极指南:告别重复操作,轻松管理多账号 【免费下载链接】xianyu_automatize [iewoai]主要用于实现闲鱼真机自动化(包括自动签到、自动擦亮、统计宝贝数据) 项目地址: https://gitcode.com/gh_mirrors/xia/xianyu_…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/9 19:40:56

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/10 6:57:56

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

终极原神FPS解锁器完整指南:轻松突破60帧限制

终极原神FPS解锁器完整指南:轻松突破60帧限制

2026/7/10 0:00:42

终极原神FPS解锁器完整指南:轻松突破60帧限制 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 原神FPS解锁器是一款专为《原神》玩家设计的开源工具,通过先进的Wri…

YesPlayMusic:如何用高颜值播放器重塑你的网易云音乐体验?[特殊字符]

YesPlayMusic:如何用高颜值播放器重塑你的网易云音乐体验?[特殊字符]

2026/7/10 0:00:42

YesPlayMusic:如何用高颜值播放器重塑你的网易云音乐体验?🎵 【免费下载链接】YesPlayMusic 高颜值的第三方网易云播放器,支持 Windows / macOS / Linux :electron: 项目地址: https://gitcode.com/gh_mirrors/ye/YesPlayMusic…

从零实现红黑树:手写C++的set与map容器

从零实现红黑树:手写C++的set与map容器

2026/7/10 0:00:42

1. 项目概述:从STL容器到自研轮子在C的日常开发中,std::set和std::map是我们再熟悉不过的伙伴了。它们一个负责管理不重复的集合,一个负责维护键值对映射,底层都依赖一颗高效的红黑树来保证数据的有序性和操作的性能。但你是否曾想…