logo
0
0
WeChat Login

GitLab Webhook Service

接收并处理GitLab Webhook事件,转换为企业微信通知。

功能特性

  • ✅ 兼容GitLab v17.2版本
  • ✅ 支持所有GitLab Webhook事件类型
  • ✅ 使用FastAPI框架,高性能
  • ✅ 支持企业微信markdown消息推送
  • ✅ 支持GitLab签名验证
  • ✅ 支持Docker容器化部署
  • ✅ 支持Conda虚拟环境
  • ✅ 完整的日志记录
  • ✅ 健康检查端点
  • ✅ 支持事件类型路由(不同事件发送到不同企业微信机器人)

技术栈

  • 框架: FastAPI 0.115.0
  • Python版本: 3.10.12
  • 依赖管理: Pip / Conda
  • 容器化: Docker / Docker Compose
  • 数据验证: Pydantic 2.9.2
  • HTTP服务器: Uvicorn

支持的GitLab事件

  • Push Event
  • Tag Event
  • Issue Event
  • Comment Event
  • Merge Request Event
  • Wiki Page Event
  • Pipeline Event
  • Job Event
  • Deployment Event
  • Feature Flag Event
  • Release Event
  • Emoji Event
  • Project/Group Access Token Event
  • Group Member Event (仅组webhook)
  • Subgroup Event (仅组webhook)

安装与运行

方法一:使用Conda虚拟环境

  1. 创建Conda环境

    conda env create -f environment.yml
  2. 激活环境

    conda activate gitlab-webhook
  3. 运行应用

    uvicorn main:app --host 0.0.0.0 --port 8000 --reload

方法二:使用Pip

  1. 安装依赖

    pip install -r requirements.txt
  2. 运行应用

    uvicorn main:app --host 0.0.0.0 --port 8000 --reload

方法三:使用Docker

  1. 构建Docker镜像

    docker build -t gitlab-webhook -f docker/Dockerfile .
  2. 运行Docker容器

    docker run -d -p 8000:8000 --name gitlab-webhook gitlab-webhook

方法四:使用Docker Compose

  1. 运行Docker Compose
    docker compose -f docker/docker-compose.yml up -d

配置

环境变量

环境变量名描述默认值
host服务器主机地址0.0.0.0
port服务器端口8000
gitlab_webhook_secretGitLab Webhook密钥,用于验证请求None
wecom_webhook_url默认企业微信机器人Webhook URLhttps://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_wecom_key
wecom_special_webhook_url特殊企业微信机器人Webhook URL(可选)None
wecom_special_events需要发送到特殊企业微信机器人的事件类型列表,使用逗号分隔[]
支持的事件类型:push, tag_push, issue, note, merge_request, wiki_page, pipeline, build, deployment, feature_flag, release, emoji, token, group_member, subgroup
log_level日志级别info
log_file日志文件路径None

.env文件配置

可以创建.env文件来配置环境变量:

host=0.0.0.0 port=8000 gitlab_webhook_secret=your_secret_key wecom_webhook_url=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_wecom_key # 可选:配置特殊企业微信机器人 wecom_special_webhook_url=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_special_wecom_key # 可选:指定需要发送到特殊企业微信机器人的事件类型,使用逗号分隔 # 支持的事件类型:push, tag_push, issue, note, merge_request, wiki_page, pipeline, build, deployment, feature_flag, release, emoji, token, group_member, subgroup wecom_special_events=push,tag_push,release log_level=info log_file=logs/webhook.log

API文档

应用启动后,可以通过以下地址访问API文档:

健康检查

可以通过以下端点进行健康检查:

GET /health

GitLab Webhook配置

  1. 登录GitLab,进入项目或组的设置页面
  2. 选择「Webhooks」选项
  3. 配置以下信息:
    • URL: http://your-server-ip:8000/webhook
    • Secret Token: 与gitlab_webhook_secret配置一致
    • 触发事件: 选择需要监听的事件
  4. 点击「Add webhook」保存配置
  5. 可以点击「Test」按钮测试webhook是否正常工作

企业微信消息格式

所有GitLab事件都会转换为企业微信markdown格式消息,包含以下信息:

  • 事件类型
  • 项目信息
  • 触发用户
  • 事件详情
  • 相关链接

项目结构

gitlab-webhook/ ├── main.py # FastAPI应用入口 ├── requirements.txt # 依赖管理 ├── schemas.py # Pydantic模型定义 ├── handlers.py # 事件处理逻辑 ├── config.py # 配置管理 ├── __init__.py # 包初始化文件 ├── environment.yml # Conda环境配置 ├── docker/ # Docker配置 │ ├── Dockerfile # Docker构建文件 │ ├── docker-compose.yml # Docker Compose配置 │ └── entrypoint.sh # 容器启动脚本 └── README.md # 模块说明文档

日志

应用默认输出日志到控制台,日志级别为info。可以通过配置log_file将日志输出到文件。

日志格式:

YYYY-MM-DD HH:MM:SS - logger_name - INFO - message

troubleshooting

常见问题

  1. GitLab签名验证失败

    • 检查GitLab配置的Secret Token与gitlab_webhook_secret是否一致
    • 确保请求头中包含X-Gitlab-Token字段
  2. 企业微信消息发送失败

    • 检查企业微信机器人Webhook URL是否正确
    • 确保企业微信机器人处于正常状态
    • 查看日志获取详细错误信息
  3. 应用启动失败

    • 检查端口是否被占用
    • 确保依赖安装正确
    • 查看日志获取详细错误信息

开发

安装开发依赖

pip install -r requirements.txt

运行测试

# 目前暂未添加测试

代码风格

项目遵循PEP 8代码风格规范。

许可证

MIT License

贡献

欢迎提交Issue和Pull Request!

更新日志

v1.0.0

  • 初始版本
  • 支持所有GitLab v17.2 Webhook事件
  • 支持企业微信markdown消息推送
  • 支持Docker容器化部署
  • 支持Conda虚拟环境

About

https://github.com/shamozhu/gitlab-webhook.git

184.00 KiB
0 forks0 stars1 branches0 TagREADMEMIT license
Language
Shell51.8%
Python47.2%
Dockerfile1%