这是一个Python Web服务,用于接收GitHub仓库的Webhook推送,并将Issue、Pull Request和Push事件格式化后转发到飞书群聊中。
- ✅ 支持GitHub Issue事件(创建、关闭、重新打开)
- ✅ 支持GitHub Pull Request事件(创建、关闭、重新打开、合并)
- ✅ 支持GitHub Push事件(代码推送)
- ✅ 美观的飞书卡片消息格式
- ✅ GitHub Webhook签名验证
- ✅ 环境变量配置管理
- ✅ 完整的日志记录
- ✅ 健康检查接口
- Python 3.10.x 及以上版本
- 网络连接(用于接收GitHub Webhook和发送飞书消息)
git clone <your-repo-url>
cd github-feishu-webhookpip install -r requirements.txt复制环境变量示例文件:
cp .env.example .env编辑 .env 文件,填入必要的配置:
# 飞书机器人Webhook地址(必填)
FEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/your-webhook-token
# GitHub Webhook验证密钥(可选,建议配置)
GITHUB_WEBHOOK_SECRET=your-github-webhook-secret
# 服务器配置
HOST=0.0.0.0
PORT=5000
DEBUG=Falsepython app.py服务将在 http://localhost:5000 启动。
- 进入你的GitHub仓库设置页面
- 点击 "Webhooks" → "Add webhook"
- 填入以下信息:
- Payload URL:
http://your-server:5000/webhook - Content type:
application/json - Secret: 与环境变量中的
GITHUB_WEBHOOK_SECRET保持一致 - Events: 选择
Issues,Pull requests,Pushes
- Payload URL:
- 在飞书群聊中添加机器人
- 获取机器人的Webhook地址
- 将地址配置到环境变量
FEISHU_WEBHOOK_URL中
- URL:
/webhook - 方法:
POST - 描述: 接收GitHub Webhook推送
- URL:
/health - 方法:
GET - 描述: 检查服务运行状态
- URL:
/ - 方法:
GET - 描述: 显示服务信息
opened: Issue创建closed: Issue关闭reopened: Issue重新打开
opened: PR创建closed: PR关闭reopened: PR重新打开merged: PR合并(自动检测)
- 代码推送到任意分支
- 显示提交信息、统计数据等
服务会将GitHub事件转换为美观的飞书卡片消息,包含:
- 📋 Issue消息: 标题、描述、标签、指派人、状态等
- 🔀 Pull Request消息: 标题、描述、分支信息、统计数据、审核者等
- 📤 Push消息: 分支、提交列表、变更统计等
gunicorn -w 4 -b 0.0.0.0:5000 app:app创建 Dockerfile:
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "app:app"]构建和运行:
docker build -t github-feishu-webhook .
docker run -d -p 5000:5000 --env-file .env github-feishu-webhookserver {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}- 配置Webhook密钥: 在GitHub和环境变量中设置相同的密钥,确保请求来源的合法性
- 使用HTTPS: 在生产环境中使用HTTPS协议
- 防火墙配置: 只允许GitHub的IP地址访问Webhook接口
- 日志监控: 定期检查日志文件,监控异常活动
-
消息发送失败
- 检查飞书Webhook地址是否正确
- 确认网络连接正常
- 查看日志文件获取详细错误信息
-
GitHub签名验证失败
- 确认环境变量中的密钥与GitHub配置一致
- 检查请求头中是否包含正确的签名
-
服务无法启动
- 检查Python版本是否符合要求
- 确认所有依赖已正确安装
- 验证环境变量配置
服务会输出详细的日志信息,包括:
- 接收到的GitHub事件类型
- 消息处理过程
- 发送结果
- 错误信息
github-feishu-webhook/
├── app.py # 主应用程序
├── config.py # 配置管理
├── github_parser.py # GitHub事件解析器
├── feishu_sender.py # 飞书消息发送器
├── requirements.txt # Python依赖
├── .env.example # 环境变量示例
├── .gitignore # Git忽略文件
└── README.md # 项目文档
- 在
github_parser.py中添加新的解析方法 - 在
feishu_sender.py中添加对应的消息格式化方法 - 更新
supported_events字典
修改 feishu_sender.py 中的格式化方法,可以自定义消息的样式和内容。
MIT License
欢迎提交Issue和Pull Request来改进这个项目!