339 lines
7.2 KiB
Markdown
339 lines
7.2 KiB
Markdown
# Gitea Webhook Ambassador (Python Enhanced Version)
|
|
|
|
This is a Gitea Webhook Ambassador service rewritten in Python, providing the same features as the Go version, but with an added web interface and more management features.
|
|
|
|
## 🚀 Quick Start
|
|
|
|
### Method 1: Use the devbox script (recommended, same as Go version)
|
|
|
|
```bash
|
|
# Install dependencies
|
|
./devbox install
|
|
|
|
# Initialize database
|
|
./devbox init
|
|
|
|
# Start the service
|
|
./devbox start
|
|
|
|
# Check status
|
|
./devbox status
|
|
|
|
# View logs
|
|
./devbox logs
|
|
|
|
# Stop the service
|
|
./devbox stop
|
|
```
|
|
|
|
### Method 2: Use Makefile
|
|
|
|
```bash
|
|
# Install dependencies
|
|
make install
|
|
|
|
# Initialize database
|
|
make init
|
|
|
|
# Start the service (foreground)
|
|
make run
|
|
|
|
# Start the service (background)
|
|
make start
|
|
|
|
# Check status
|
|
make status
|
|
|
|
# View logs
|
|
make logs
|
|
|
|
# Stop the service
|
|
make stop
|
|
```
|
|
|
|
### Method 3: Use Python directly
|
|
|
|
```bash
|
|
# Create virtual environment
|
|
python3 -m venv venv
|
|
source venv/bin/activate
|
|
|
|
# Install dependencies
|
|
pip install -r requirements.txt
|
|
|
|
# Initialize database
|
|
python -c "from app.models.database import create_tables; create_tables()"
|
|
|
|
# Start the service
|
|
python -m uvicorn app.main_enhanced:app --host 0.0.0.0 --port 8000
|
|
```
|
|
|
|
## 📁 Directory Structure (same as Go version)
|
|
|
|
```
|
|
gitea-webhook-ambassador-python/
|
|
├── app/ # Application code
|
|
│ ├── auth/ # Authentication module
|
|
│ ├── handlers/ # API handlers
|
|
│ ├── models/ # Data models
|
|
│ ├── templates/ # HTML templates
|
|
│ ├── static/ # Static files
|
|
│ └── main_enhanced.py # Main application entry
|
|
├── cmd/ # CLI tools (same as Go version)
|
|
│ └── server/ # Server startup
|
|
├── configs/ # Configuration files (same as Go version)
|
|
│ └── config.yaml # Main configuration file
|
|
├── data/ # Data directory (same as Go version)
|
|
│ └── *.db # SQLite database files
|
|
├── logs/ # Log directory (same as Go version)
|
|
│ └── service.log # Service log
|
|
├── devbox # Startup script (same as Go version)
|
|
├── Makefile # Build script (same as Go version)
|
|
├── requirements.txt # Python dependencies
|
|
└── README_ENHANCED.md # This document
|
|
```
|
|
|
|
## 🔧 Configuration
|
|
|
|
Edit the `configs/config.yaml` file:
|
|
|
|
```yaml
|
|
server:
|
|
port: 8000
|
|
webhookPath: "/webhook"
|
|
secretHeader: "X-Gitea-Signature"
|
|
secretKey: "admin-secret-key-change-in-production"
|
|
|
|
jenkins:
|
|
url: "http://jenkins.example.com"
|
|
username: "jenkins-user"
|
|
token: "jenkins-api-token"
|
|
timeout: 30
|
|
|
|
admin:
|
|
token: "admin-api-token"
|
|
|
|
database:
|
|
path: "data/gitea-webhook-ambassador.db"
|
|
|
|
logging:
|
|
level: "info"
|
|
format: "text"
|
|
file: "logs/service.log"
|
|
|
|
worker:
|
|
poolSize: 10
|
|
queueSize: 100
|
|
maxRetries: 3
|
|
retryBackoff: 1
|
|
|
|
eventCleanup:
|
|
interval: 3600
|
|
expireAfter: 7200
|
|
```
|
|
|
|
## 🌐 Web Interface
|
|
|
|
After starting the service, visit the following addresses:
|
|
|
|
- **Login page**: http://localhost:8000
|
|
- **Dashboard**: http://localhost:8000/dashboard
|
|
- **API Docs**: http://localhost:8000/docs
|
|
|
|
### Default login credentials
|
|
- **Username**: admin
|
|
- **Password**: admin-secret-key-change-in-production
|
|
|
|
## 📊 Features
|
|
|
|
### ✅ Same features as Go version
|
|
- Gitea Webhook receiving and processing
|
|
- Jenkins job triggering
|
|
- Project mapping configuration
|
|
- Branch pattern matching
|
|
- Retry mechanism
|
|
- Logging
|
|
|
|
### 🆕 Python version enhancements
|
|
- **Web login interface**: Modern UI based on Bootstrap 5
|
|
- **Database storage**: SQLite database for API keys and configuration
|
|
- **JWT authentication**: 7-day valid JWT tokens
|
|
- **Frontend dashboard**: Multi-tab management interface
|
|
- **Auto redirect**: Unauthenticated users are redirected to login
|
|
- **Health check**: Service status monitoring
|
|
- **Statistics**: Request statistics and performance metrics
|
|
|
|
## 🔌 API Endpoints
|
|
|
|
### Authentication
|
|
- `POST /api/auth/login` - User login
|
|
- `GET /api/auth/verify` - Verify JWT token
|
|
|
|
### Project Management
|
|
- `GET /api/projects` - Get project list
|
|
- `POST /api/projects` - Create new project
|
|
- `PUT /api/projects/{id}` - Update project
|
|
- `DELETE /api/projects/{id}` - Delete project
|
|
|
|
### API Key Management
|
|
- `GET /api/keys` - Get API key list
|
|
- `POST /api/keys` - Create new API key
|
|
- `DELETE /api/keys/{id}` - Delete API key
|
|
|
|
### System Monitoring
|
|
- `GET /api/health` - Health check
|
|
- `GET /api/stats` - Statistics
|
|
- `GET /api/logs` - View logs
|
|
|
|
### Webhook Handling
|
|
- `POST /webhook` - Gitea Webhook endpoint
|
|
|
|
## 🛠️ Development
|
|
|
|
### Run tests
|
|
```bash
|
|
# Use devbox
|
|
./devbox test
|
|
|
|
# Use Makefile
|
|
make test
|
|
|
|
# Run directly
|
|
python test_enhanced_features.py
|
|
```
|
|
|
|
### Code linting
|
|
```bash
|
|
# Use Makefile
|
|
make lint
|
|
|
|
# Run directly
|
|
flake8 app/ --max-line-length=120 --ignore=E501,W503
|
|
```
|
|
|
|
### Clean up
|
|
```bash
|
|
# Use devbox
|
|
./devbox clean
|
|
|
|
# Use Makefile
|
|
make clean
|
|
```
|
|
|
|
## 🐳 Docker Deployment
|
|
|
|
### Build image
|
|
```bash
|
|
# Use Makefile
|
|
make docker-build
|
|
|
|
# Build directly
|
|
docker build -t gitea-webhook-ambassador:latest .
|
|
```
|
|
|
|
### Run container
|
|
```bash
|
|
docker run -d \
|
|
--name gitea-webhook-ambassador \
|
|
-p 8000:8000 \
|
|
-v $(pwd)/configs:/app/configs \
|
|
-v $(pwd)/data:/app/data \
|
|
-v $(pwd)/logs:/app/logs \
|
|
gitea-webhook-ambassador:latest
|
|
```
|
|
|
|
## 📈 Comparison with Go Version
|
|
|
|
| Feature | Go Version | Python Version |
|
|
|---------|------------|---------------|
|
|
| **Startup** | `./devbox start` | `./devbox start` |
|
|
| **Directory Structure** | Standard Go project | Same as Go version |
|
|
| **Config File** | `configs/config.yaml` | `configs/config.yaml` |
|
|
| **Log Directory** | `logs/` | `logs/` |
|
|
| **Data Directory** | `data/` | `data/` |
|
|
| **Web Interface** | ❌ No | ✅ Full dashboard |
|
|
| **Database** | ❌ No | ✅ SQLite |
|
|
| **JWT Auth** | ❌ No | ✅ 7-day validity |
|
|
| **API Key Management** | ❌ No | ✅ Database storage |
|
|
| **Health Check** | ✅ Basic | ✅ Enhanced |
|
|
| **Performance** | 🚀 Very high | 🚀 High |
|
|
|
|
## 🔄 Migration Guide
|
|
|
|
### Migrate from Go version to Python version
|
|
|
|
1. **Stop Go service**
|
|
```bash
|
|
cd /path/to/go-version
|
|
./devbox stop
|
|
```
|
|
|
|
2. **Start Python service**
|
|
```bash
|
|
cd /path/to/python-version
|
|
./devbox install
|
|
./devbox init
|
|
./devbox start
|
|
```
|
|
|
|
3. **Verify service**
|
|
```bash
|
|
./devbox status
|
|
curl http://localhost:8000/api/health
|
|
```
|
|
|
|
4. **Configure Webhook**
|
|
- Update Gitea Webhook URL to the new Python service address
|
|
- Ensure Jenkins configuration is correct
|
|
|
|
## 🆘 Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
**1. Port 8000 is occupied**
|
|
```bash
|
|
# Check port usage
|
|
lsof -i :8000
|
|
|
|
# Stop the occupying process
|
|
sudo kill -9 <PID>
|
|
```
|
|
|
|
**2. Virtual environment issues**
|
|
```bash
|
|
# Recreate virtual environment
|
|
rm -rf venv
|
|
./devbox install
|
|
```
|
|
|
|
**3. Database issues**
|
|
```bash
|
|
# Reinitialize database
|
|
./devbox init
|
|
```
|
|
|
|
**4. Permission issues**
|
|
```bash
|
|
# Set script permissions
|
|
chmod +x devbox
|
|
```
|
|
|
|
### View logs
|
|
```bash
|
|
# View real-time logs
|
|
./devbox follow
|
|
|
|
# View latest logs
|
|
./devbox logs
|
|
|
|
# View full logs
|
|
tail -f logs/service.log
|
|
```
|
|
|
|
## 📞 Support
|
|
|
|
If you have any issues, please check:
|
|
1. Service status: `./devbox status`
|
|
2. Log information: `./devbox logs`
|
|
3. Configuration file: `configs/config.yaml`
|
|
4. Network connection: `curl http://localhost:8000/api/health` |