258 lines
5.3 KiB
Markdown
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. |