如何用Python+AWS服务实现每日拉取GitHub超时PR及负责人列表
需求实现完整方案
一、PyCharm环境下对接GitHub拉取PR数据
1. 前置准备
- 首先生成GitHub Personal Access Token(PAT):登录GitHub进入「Settings」→「Developer settings」→「Personal access tokens」,生成新token,勾选
repo、read:org权限,保存好生成的token不要泄露。 - 打开PyCharm,进入「Settings/Preferences」→「Version Control」→「GitHub」,点击加号选择用PAT登录,输入刚才生成的token即可完成PyCharm与GitHub的账号关联。
2. 依赖安装
在PyCharm的终端中执行命令安装GitHub API封装库:
pip install PyGitHub
3. 核心实现代码
建议把敏感配置放在环境变量中,不要硬编码到代码里,参考示例如下:
import os from datetime import datetime, timedelta from github import Github # 从环境变量读取配置 GITHUB_TOKEN = os.getenv("GITHUB_PAT") ORG_NAME = os.getenv("GITHUB_ORG_NAME") # PR开启时长阈值,单位为小时 PR_EXPIRE_HOURS = int(os.getenv("PR_EXPIRE_HOURS", 24)) # 初始化GitHub客户端 gh_client = Github(GITHUB_TOKEN) target_org = gh_client.get_organization(ORG_NAME) match_pr_list = [] # 遍历组织下所有仓库的开放PR for repo in target_org.get_repos(): for open_pr in repo.get_pulls(state="open"): create_time = open_pr.created_at.replace(tzinfo=None) open_duration = datetime.utcnow() - create_time # 筛选超过指定时长的PR if open_duration.total_seconds() > PR_EXPIRE_HOURS * 3600: match_pr_list.append({ "仓库名": repo.name, "PR标题": open_pr.title, "PR链接": open_pr.html_url, "负责人": open_pr.user.login, "开启时长(小时)": round(open_duration.total_seconds() / 3600, 1) }) # 输出结果,可根据需求修改为发邮件、发群通知等逻辑 for pr_info in match_pr_list: print(pr_info)
二、AWS端实现每日凌晨自动运行
Lambda完全可以支撑该需求,部署步骤如下:
- 本地打包代码:在项目根目录执行命令安装依赖到当前目录:
pip install PyGitHub -t .,把代码文件和所有依赖文件一起选中压缩为zip包。 - 进入AWS Lambda控制台创建新函数,运行环境选择Python 3.9及以上版本,选择「上传zip文件」把刚才的压缩包上传。
- 进入Lambda函数的「配置」→「环境变量」,添加
GITHUB_PAT、GITHUB_ORG_NAME、PR_EXPIRE_HOURS三个变量,填入对应值。 - 添加定时触发器:选择Amazon EventBridge服务,创建新的定时规则,cron表达式设置为你需要的凌晨执行时间,比如国内时区凌晨2点执行的cron为
0 2 * * ? *,时区选择Asia/Shanghai即可。 - 扩展通知逻辑:如果需要把PR列表自动推送给团队,可以在代码中增加对接钉钉/企业微信机器人的逻辑,或者调用AWS SNS服务发送邮件/短信通知。
三、注意事项
- GitHub API有调用频率限制,普通PAT每分钟最多调用60次,若组织下仓库数量较多,可以申请GitHub App凭证获取更高的调用配额。
- Lambda单次运行最长支持15分钟,若组织下仓库数量极多15分钟内无法遍历完成,可以拆分任务用AWS Step Functions分步执行。
- 定期轮换GitHub PAT,避免凭证泄露带来安全风险。
内容的提问来源于stack exchange,提问作者Crazy_Chelesa86
相关产品推荐
相关产品推荐

