Files
GiteaToFeishuMsg/README.md
2025-12-02 13:27:52 +08:00

161 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Gitea 到飞书 Webhook 中转服务
将 Gitea 的工单事件(创建、更新、关闭等)通过 Webhook 接收,转换为美观的飞书卡片消息,并转发到飞书群聊。
## 功能特性
- 接收 Gitea Webhook 事件(支持工单相关动作)
- 验证 Webhook 签名(可选)
- 将事件转换为飞书交互式卡片
- 支持自定义卡片标题、颜色、字段
- 完整的错误处理和日志记录
- 健康检查端点
- 易于部署和配置
## 系统架构
```
Gitea → Webhook → 中转服务 (Express) → 飞书机器人 → 飞书群聊
```
## 快速开始
### 前提条件
- Node.js 18+
- 一个飞书机器人,并获取其 Webhook URL
- Gitea 实例(版本 1.20+
### 安装
1. 克隆仓库
```bash
git clone <repository-url>
cd gitea-feishu-webhook-relay
```
2. 安装依赖
```bash
npm install
```
3. 配置环境变量
复制 `.env.example``.env` 并填写实际值:
```bash
cp .env.example .env
```
编辑 `.env`
```env
PORT=3000
GITEA_WEBHOOK_SECRET=your_gitea_webhook_secret
FEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/xxx
LOG_LEVEL=info
```
### 运行
开发模式(使用 nodemon
```bash
npm run dev
```
生产模式:
```bash
npm start
```
服务将在 `http://localhost:3000` 启动。
## 配置 Gitea Webhook
1. 进入 Gitea 仓库的设置 → Webhooks → 添加 Webhook
2. 选择 “Gitea” 类型
3. 目标 URL`http://your-server-ip:3000/webhook/gitea`
4. 密钥:填写与 `GITEA_WEBHOOK_SECRET` 相同的值
5. 触发事件:选择 “工单事件”
6. 保存
## 飞书机器人配置
1. 在飞书开放平台创建一个自定义机器人,获取 Webhook URL。
2. 将机器人添加到目标群聊。
3. 将 Webhook URL 填入 `FEISHU_WEBHOOK_URL`
## API 端点
- `GET /health` 健康检查
- `POST /webhook/gitea` 接收 Gitea Webhook
## 日志
日志使用 Winston 输出到控制台和文件:
- `logs/error.log` 错误日志
- `logs/combined.log` 所有日志
## Docker 部署
提供 Dockerfile 便于容器化部署。
构建镜像:
```bash
docker build -t gitea-feishu-relay .
```
运行容器:
```bash
docker run -p 3000:3000 --env-file .env gitea-feishu-relay
```
## 环境变量
| 变量名 | 描述 | 默认值 |
|--------|------|--------|
| PORT | 服务监听端口 | 3000 |
| GITEA_WEBHOOK_SECRET | Gitea Webhook 签名密钥 | (空) |
| FEISHU_WEBHOOK_URL | 飞书机器人 Webhook URL | (必需) |
| LOG_LEVEL | 日志级别 (error, warn, info, debug) | info |
| NODE_ENV | 运行环境 (development, production) | development |
## 开发
### 项目结构
```
src/
├── server.js # Express 服务器入口
├── config.js # 配置管理
├── webhooks/
│ └── gitea.js # Webhook 处理器
├── transformers/
│ └── giteaToFeishu.js # 消息转换器
├── clients/
│ └── feishu.js # 飞书 API 客户端
└── utils/
└── logger.js # 日志工具
```
### 测试
运行单元测试:
```bash
npm test
```
## 故障排除
1. **收不到飞书消息**
- 检查 `FEISHU_WEBHOOK_URL` 是否正确
- 查看日志中是否有错误信息
- 确认飞书机器人已加入群聊
2. **Gitea Webhook 验证失败**
- 确保 `GITEA_WEBHOOK_SECRET` 与 Gitea 中设置的密钥一致
- 检查请求头中是否包含 `X-Gitea-Signature`
3. **服务无法启动**
- 确认端口未被占用
- 检查 Node.js 版本
## 许可证
MIT