# 🚀 Gitea Webhook Ambassador 使用指南 ## 📋 目录 1. [快速开始](#快速开始) 2. [配置说明](#配置说明) 3. [API 接口](#api-接口) 4. [数据库管理](#数据库管理) 5. [监控和日志](#监控和日志) 6. [故障排除](#故障排除) ## 🚀 快速开始 ### 1. 环境准备 ```bash # 克隆项目 cd freeleaps-ops/apps/gitea-webhook-ambassador-python # 运行快速设置脚本 chmod +x scripts/setup.sh ./scripts/setup.sh ``` ### 2. 配置环境 编辑 `.env` 文件,配置必要的参数: ```bash # 编辑配置文件 nano .env ``` **必需配置**: ```env # Jenkins 配置 JENKINS_USERNAME=your_jenkins_username JENKINS_TOKEN=your_jenkins_api_token # 安全配置 SECURITY_SECRET_KEY=your-secret-key-here-make-it-long-and-random ``` ### 3. 启动服务 ```bash # 方法1: 使用启动脚本 chmod +x scripts/start.sh ./scripts/start.sh # 方法2: 手动启动 # 启动 Redis docker run -d --name webhook-redis -p 6379:6379 redis:alpine # 激活虚拟环境 source venv/bin/activate # 启动 API 服务 python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload # 新终端启动 Celery worker celery -A app.tasks.jenkins_tasks worker --loglevel=info --concurrency=4 # 新终端启动定时任务 celery -A app.tasks.jenkins_tasks beat --loglevel=info ``` ### 4. 验证安装 访问以下地址验证服务是否正常: - **API 文档**: http://localhost:8000/docs - **健康检查**: http://localhost:8000/health - **监控指标**: http://localhost:8000/metrics ## ⚙️ 配置说明 ### 环境分发配置 编辑 `config/environments.yaml` 文件: ```yaml environments: dev: branches: ["dev", "develop", "development", "feature/*"] jenkins_job: "alpha-build" jenkins_url: "https://jenkins-alpha.freeleaps.com" priority: 2 prod: branches: ["prod", "production", "main", "master", "release/*"] jenkins_job: "production-build" jenkins_url: "https://jenkins-prod.freeleaps.com" priority: 1 ``` ### 防抖配置 ```yaml deduplication: enabled: true window_seconds: 300 # 5分钟防抖窗口 strategy: "commit_branch" # commit_hash + branch cache_ttl: 3600 # 缓存1小时 ``` ## 🔧 API 接口 ### Webhook 端点 **POST** `/webhook/gitea` 接收 Gitea webhook 事件: ```bash curl -X POST "http://localhost:8000/webhook/gitea" \ -H "Content-Type: application/json" \ -H "X-Gitea-Signature: your-secret-key" \ -d '{ "ref": "refs/heads/dev", "before": "abc123", "after": "def456", "repository": { "full_name": "freeleaps/my-project", "clone_url": "https://gitea.freeleaps.com/freeleaps/my-project.git" }, "pusher": { "login": "developer", "email": "dev@freeleaps.com" } }' ``` ### 健康检查 **GET** `/health` ```bash curl http://localhost:8000/health ``` 响应示例: ```json { "status": "healthy", "timestamp": 1640995200.0, "services": { "redis": "healthy", "celery": "healthy" } } ``` ### 队列状态 **GET** `/health/queue` ```bash curl http://localhost:8000/health/queue ``` 响应示例: ```json { "status": "healthy", "queue_stats": { "active_tasks": 2, "queued_tasks": 5, "worker_count": 4, "total_queue_length": 7 } } ``` ### 监控指标 **GET** `/metrics` ```bash curl http://localhost:8000/metrics ``` 返回 Prometheus 格式的监控指标。 ## 🗄️ 数据库管理 ### 创建项目映射 使用 Python 脚本创建项目映射: ```python # create_mapping.py import asyncio from app.services.database_service import get_database_service async def create_mapping(): db_service = get_database_service() mapping_data = { "repository_name": "freeleaps/my-project", "default_job": "default-build", "branch_jobs": [ {"branch_name": "dev", "job_name": "alpha-build"}, {"branch_name": "main", "job_name": "production-build"} ], "branch_patterns": [ {"pattern": r"feature/.*", "job_name": "feature-build"}, {"pattern": r"hotfix/.*", "job_name": "hotfix-build"} ] } success = await db_service.create_project_mapping(mapping_data) print(f"创建映射: {'成功' if success else '失败'}") if __name__ == "__main__": asyncio.run(create_mapping()) ``` 运行脚本: ```bash python create_mapping.py ``` ### 查看触发日志 ```python # view_logs.py import asyncio from app.services.database_service import get_database_service async def view_logs(): db_service = get_database_service() logs = await db_service.get_trigger_logs( repository_name="freeleaps/my-project", limit=10 ) for log in logs: print(f"[{log['created_at']}] {log['repository_name']} - {log['branch_name']} - {log['status']}") if __name__ == "__main__": asyncio.run(view_logs()) ``` ## 📊 监控和日志 ### 日志查看 ```bash # 查看应用日志 tail -f logs/app.log # 查看 Celery 日志 tail -f logs/celery.log ``` ### 监控面板 使用 Grafana 创建监控面板: 1. 访问 http://localhost:3000 (Grafana) 2. 用户名: `admin`, 密码: `admin` 3. 添加 Prometheus 数据源: http://prometheus:9090 4. 导入监控面板 ### 关键指标 - **webhook_requests_total**: Webhook 请求总数 - **webhook_request_duration_seconds**: 请求响应时间 - **queue_size**: 队列长度 - **dedup_hits_total**: 防抖命中次数 ## 🔧 故障排除 ### 常见问题 #### 1. Redis 连接失败 ```bash # 检查 Redis 状态 docker ps | grep redis # 重启 Redis docker restart webhook-redis ``` #### 2. Celery Worker 无法启动 ```bash # 检查 Celery 配置 celery -A app.tasks.jenkins_tasks inspect active # 重启 Worker pkill -f "celery.*worker" celery -A app.tasks.jenkins_tasks worker --loglevel=info ``` #### 3. Jenkins 连接失败 ```bash # 测试 Jenkins 连接 curl -u username:token https://jenkins.example.com/api/json ``` #### 4. 数据库错误 ```bash # 检查数据库文件 ls -la webhook_ambassador.db # 重新初始化数据库 rm webhook_ambassador.db python -c "from app.services.database_service import get_database_service; get_database_service()" ``` ### 日志级别调整 编辑 `.env` 文件: ```env LOGGING_LEVEL=DEBUG # 开发环境 LOGGING_LEVEL=INFO # 生产环境 ``` ### 性能调优 #### 增加并发处理能力 ```env QUEUE_MAX_CONCURRENT=20 ``` #### 调整防抖窗口 ```env DEDUPLICATION_WINDOW_SECONDS=600 # 10分钟 ``` ## 🐳 Docker 部署 ### 使用 Docker Compose ```bash # 启动所有服务 docker-compose up -d # 查看服务状态 docker-compose ps # 查看日志 docker-compose logs -f api ``` ### 生产环境部署 ```bash # 构建镜像 docker build -t webhook-ambassador:latest . # 运行容器 docker run -d \ --name webhook-ambassador \ -p 8000:8000 \ -v $(pwd)/config:/app/config \ -v $(pwd)/logs:/app/logs \ --env-file .env \ webhook-ambassador:latest ``` ## 📞 支持 如果遇到问题,请检查: 1. 日志文件中的错误信息 2. 健康检查端点返回的状态 3. 监控指标中的异常数据 4. 网络连接和防火墙设置 更多帮助请参考项目文档或提交 Issue。