freeleaps-ops/apps/gitea-webhook-ambassador-python/USAGE.md

258 lines
5.3 KiB
Markdown

# 🚀 Gitea Webhook Ambassador Usage Guide
## 📋 Table of Contents
1. [Quick Start](#quick-start)
2. [Configuration](#configuration)
3. [API Endpoints](#api-endpoints)
4. [Database Management](#database-management)
5. [Monitoring and Logs](#monitoring-and-logs)
6. [Troubleshooting](#troubleshooting)
## 🚀 Quick Start
### 1. Environment Preparation
```bash
# Clone the project
git clone https://your.repo.url/gitea-webhook-ambassador-python.git
cd gitea-webhook-ambassador-python
# Run quick setup script
./devbox install
```
### 2. Configure Environment
Edit the `.env` file to set required parameters:
```bash
# Edit configuration file
cp .env.example .env
vim .env
```
**Required configuration:**
```bash
# Jenkins configuration
JENKINS_USERNAME=your_jenkins_username
JENKINS_TOKEN=your_jenkins_token
# Security configuration
SECURITY_SECRET_KEY=your_secret_key
```
### 3. Start Service
```bash
# Method 1: Use the startup script
./devbox start
# Method 2: Manual startup
# Start Redis
docker run -d -p 6379:6379 redis:alpine
# Activate virtual environment
source venv/bin/activate
# Start API service
python -m uvicorn app.main_enhanced:app --host 0.0.0.0 --port 8000
# Start Celery worker in a new terminal
celery -A app.tasks.jenkins_tasks worker --loglevel=info
# Start scheduled tasks in a new terminal
celery -A app.tasks.jenkins_tasks beat --loglevel=info
```
### 4. Verify Installation
Visit the following addresses to verify the service:
- **API Docs**: http://localhost:8000/docs
- **Health Check**: http://localhost:8000/health
- **Metrics**: http://localhost:8000/metrics
## ⚙️ Configuration
### Environment Dispatch Configuration
Edit the `config/environments.yaml` file:
```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
staging:
branches: ["staging", "stage", "pre-prod"]
jenkins_job: "staging-build"
jenkins_url: "https://jenkins-staging.freeleaps.com"
priority: 3
default:
branches: ["*"]
jenkins_job: "default-build"
jenkins_url: "https://jenkins-default.freeleaps.com"
priority: 4
```
### Deduplication Configuration
```yaml
deduplication:
enabled: true
window_seconds: 300 # 5-minute deduplication window
strategy: "commit_branch"
cache_ttl: 3600 # Cache for 1 hour
```
## 🔧 API Endpoints
### Webhook Endpoint
Receive Gitea webhook events:
```http
POST /webhook/gitea
```
### Health Check
```http
GET /health
GET /health/queue
GET /health/jenkins
```
Example response:
```json
{
"status": "healthy",
"service": "Gitea Webhook Ambassador",
"version": "1.0.0",
"timestamp": "2023-01-01T00:00:00Z",
"jenkins": {"status": "connected"},
"worker_pool": {"active_workers": 2, "queue_size": 0, "total_processed": 10, "total_failed": 1},
"database": {"status": "connected"}
}
```
### Queue Status
```http
GET /admin/queue/status
```
Example response:
```json
{
"active_tasks": 1,
"queued_tasks": 2,
"worker_count": 2,
"queue_length": 3
}
```
### Monitoring Metrics
Returns Prometheus-formatted monitoring metrics.
## 🗄️ Database Management
### Create Project Mapping
Use a Python script to create a project mapping:
```python
from app.services.database_service import get_database_service
import asyncio
db_service = get_database_service()
mapping_data = {
"repository_name": "freeleaps/test-project",
"default_job": "test-project-build",
"branch_jobs": [
{"branch_name": "dev", "job_name": "test-project-dev"},
{"branch_name": "staging", "job_name": "test-project-staging"}
],
"branch_patterns": [
{"pattern": "feature/*", "job_name": "test-project-feature"},
{"pattern": "hotfix/*", "job_name": "test-project-hotfix"}
]
}
success = asyncio.run(db_service.create_project_mapping(mapping_data))
print(f"Mapping created: {'Success' if success else 'Failed'}")
```
Run the script:
```bash
python create_mapping.py
```
### View Trigger Logs
Refer to the API documentation for log query endpoints.
## 📊 Monitoring and Logs
### View Logs
```bash
# View application logs
tail -n 50 logs/service.log
# View Celery logs
tail -n 50 logs/celery.log
```
### Monitoring Dashboard
Use Grafana to create a monitoring dashboard:
1. Visit http://localhost:3000 (Grafana)
2. Username: `admin`, Password: `admin`
3. Add Prometheus data source: http://prometheus:9090
4. Import monitoring dashboard
### Key Metrics
- **webhook_requests_total**: Total webhook requests
- **webhook_request_duration_seconds**: Request response time
- **queue_size**: Queue length
- **dedup_hits_total**: Deduplication hit count
## 🔧 Troubleshooting
### Common Issues
#### 1. Redis Connection Failure
```bash
# Check Redis status
docker ps | grep redis
# Restart Redis
docker restart webhook-ambassador-redis
```
#### 2. Celery Worker Fails to Start
```bash
# Check Celery configuration
cat .env
# Restart Worker
celery -A app.tasks.jenkins_tasks worker --loglevel=info
```
#### 3. Jenkins Connection Failure
Check Jenkins URL, username, and token in the configuration file.