- Changed the build process to include a web UI build stage using Node.js. - Updated Go build stage to copy web UI files to the correct location. - Removed the main.go file as it is no longer needed. - Added SQLite database configuration to example config. - Updated dependencies in go.mod and go.sum, including new packages for JWT and SQLite. - Modified .gitignore to include new database and configuration files. Signed-off-by: zhenyus <zhenyus@mathmast.com>
3.3 KiB
3.3 KiB
Gitea Webhook Ambassador
A service that receives Gitea webhooks and triggers corresponding Jenkins jobs based on repository and branch configurations.
Features
- Receives Gitea webhooks and triggers Jenkins jobs
- Configurable repository to Jenkins job mappings
- Branch-specific job mappings with regex pattern support
- API key management for secure access
- SQLite persistence for configurations and logs
- Configurable worker pool for job processing
- Automatic retry with exponential backoff
- Webhook event deduplication
- Comprehensive logging and monitoring
Configuration
The service is configured using a YAML file. Here's an example configuration:
server:
port: 8080
webhookPath: "/webhook"
secretHeader: "X-Gitea-Signature"
secretKey: "custom-secret-key"
jenkins:
url: "http://jenkins.example.com"
username: "jenkins-user"
token: "jenkins-api-token"
timeout: 30
admin:
token: "admin-api-token" # Token for admin API access
database:
path: "data/gitea-webhook-ambassador.db" # Path to SQLite database file
logging:
level: "info"
format: "json"
file: ""
worker:
poolSize: 10
queueSize: 100
maxRetries: 3
retryBackoff: 1
eventCleanup:
interval: 3600
expireAfter: 7200
API Endpoints
Admin API
All admin API endpoints require the X-Admin-Token header with the configured admin token.
Create API Key
POST /admin/api-keys
Content-Type: application/json
{
"key": "api-key-value",
"description": "Key description"
}
List API Keys
GET /admin/api-keys
Delete API Key
DELETE /admin/api-keys/delete?key=api-key-value
Project Mapping API
All project mapping API endpoints require the X-API-Key header with a valid API key.
Create Project Mapping
POST /api/projects
Content-Type: application/json
{
"repository_name": "owner/repo",
"default_job": "default-jenkins-job",
"branch_jobs": [
{
"branch_name": "main",
"job_name": "main-job"
}
],
"branch_patterns": [
{
"pattern": "^feature/.*$",
"job_name": "feature-job"
}
]
}
Get Project Mapping
GET /api/projects?repository=owner/repo
Trigger Logs API
Requires the X-API-Key header with a valid API key.
Get Trigger Logs
GET /api/logs?repository=owner/repo&branch=main&since=2024-01-01T00:00:00Z&limit=100
Query parameters:
repository: Filter by repository name (optional)branch: Filter by branch name (optional)since: Filter by timestamp (RFC3339 format, optional)limit: Maximum number of logs to return (default: 100, max: 1000)
Webhook Endpoint
POST /webhook
X-Gitea-Signature: custom-secret-key
{
"ref": "refs/heads/main",
"after": "commit-sha",
"repository": {
"full_name": "owner/repo",
"clone_url": "https://gitea.example.com/owner/repo.git"
},
"pusher": {
"login": "username",
"email": "user@example.com"
}
}
Building and Running
Prerequisites
- Go 1.24 or later
- SQLite3
Build
make build
Run
make run
Docker
# Build Docker image
make docker-build
# Run with Docker
docker run -p 8080:8080 -v /path/to/config.yaml:/app/config/config.yaml freeleaps/gitea-webhook-ambassador
License
This project is licensed under the MIT License - see the LICENSE file for details.