一个基于 Go Gin 的 API 服务,提供以下功能:
go mod download
复制 .env.example 为 .env 并填入实际配置:
cp .env.example .env
编辑 .env 文件:
# Appwrite 配置
APPWRITE_ENDPOINT=https://appwrite.yakir.wang
APPWRITE_PROJECT=your_project_id
APPWRITE_SESSION=your_session_token
# Jenkins 配置
JENKINS_URL=https://jenkins.yakir.wang
JENKINS_USERNAME=admin
JENKINS_TOKEN=your_jenkins_token
JENKINS_JOB_NAME=web-deployment
# 服务配置
PORT=8080
获取 Appwrite Session Token:
a_session_console 的值APPWRITE_SESSION获取 Jenkins Token:
JENKINS_TOKENgo run .
或构建后运行:
go build -o appwrite-proxy-query ./appwrite-proxy-query
GET/POST 请求:
# 查询 my-app 的域名
curl "http://localhost:8080/api/v1/domain?app_name=my-app"
# POST JSON 格式
curl -X POST http://localhost:8080/api/v1/domain \
-H "Content-Type: application/json" \
-d '{"app_name": "my-app"}'
# 查询 Function 类型
curl "http://localhost:8080/api/v1/domain?app_name=my-function&resource_type=function"
响应:
{
"success": true,
"message": "查询成功",
"data": ["694150f7d1a29704105e.sites.yakir.wang"]
}
curl "http://localhost:8080/api/v1/proxy-rules?app_name=my-app"
基本用法(使用默认 Job):
curl -X POST http://localhost:8080/api/v1/jenkins/build \
-H "Content-Type: application/json" \
-d '{
"app_name": "web-app-test",
"git_url": "https://gitlab.yakir.wang/test/web-app-test"
}'
指定 Job Name:
curl -X POST http://localhost:8080/api/v1/jenkins/build \
-H "Content-Type: application/json" \
-d '{
"app_name": "web-app-test",
"git_url": "https://gitlab.yakir.wang/test/web-app-test",
"job_name": "custom-deployment"
}'
响应:
{
"success": true,
"message": "构建已触发",
"data": {
"job_name": "web-deployment",
"app_name": "web-app-test",
"git_url": "https://gitlab.yakir.wang/test/web-app-test",
"queue_id": "123",
"queue_url": "https://jenkins.yakir.wang/queue/item/123/",
"build_id": 456,
"build_url": "https://jenkins.yakir.wang/job/web-deployment/456/"
}
}
返回字段说明:
queue_id: Jenkins 队列 IDqueue_url: Jenkins 队列 URLbuild_id: 构建 ID(实际的构建编号,通过轮询队列 API 获取)build_url: 构建详情页面 URL注意: 获取构建 ID 需要等待 Jenkins 从队列中启动构建,API 会自动轮询最多 30 秒。如果 30 秒内构建未启动,build_id 将为 0。
如果你的 Jenkins Job 有其他自定义参数:
curl -X POST http://localhost:8080/api/v1/jenkins/build-custom \
-H "Content-Type: application/json" \
-d '{
"job_name": "web-deployment",
"params": {
"APP_NAME": "my-app",
"GIT_URL": "https://gitlab.yakir.wang/test/my-app",
"BRANCH": "main",
"ENVIRONMENT": "production"
}
}'
传入构建 ID 查询构建状态(只支持 GET 请求):
curl "http://localhost:8080/api/v1/jenkins/build/status?job_name=web-deployment&build_id=456"
响应:
{
"success": true,
"message": "查询成功",
"data": {
"build_id": 456,
"build_url": "https://jenkins.yakir.wang/job/web-deployment/456/",
"status": "SUCCESS",
"result": "SUCCESS",
"building": false,
"duration": 120000,
"timestamp": 1702800000000,
"display_name": "#456",
"description": ""
}
}
状态说明:
status: 构建状态(BUILDING/SUCCESS/FAILURE/ABORTED/UNKNOWN)result: 构建结果(SUCCESS/FAILURE/ABORTED,进行中时为空字符串)building: 是否正在构建(true/false)duration: 构建持续时间(毫秒)timestamp: 构建开始时间戳(毫秒)curl http://localhost:8080/health
| 方法 | 端点 | 描述 |
|---|---|---|
| GET/POST | /api/v1/domain | 查询 Appwrite 域名 |
| GET/POST | /api/v1/proxy-rules | 查询完整 Proxy Rules |
| POST | /api/v1/jenkins/build | 触发 Jenkins 构建(标准参数) |
| POST | /api/v1/jenkins/build-custom | 触发 Jenkins 构建(自定义参数) |
| GET | /api/v1/jenkins/build/status | 查询 Jenkins 构建状态 |
| GET | /health | 健康检查 |
| 参数 | 类型 | 必填 | 说明 | 默认值 |
|---|---|---|---|---|
| app_name | string | 是 | 应用名称/资源 ID | - |
| resource_type | string | 否 | 资源类型 (site/function) | site |
| 参数 | 类型 | 必填 | 说明 | 默认值 |
|---|---|---|---|---|
| app_name | string | 是 | 应用名称 | - |
| git_url | string | 是 | Git 仓库地址 | - |
| job_name | string | 否 | Jenkins Job 名称 | 配置中的默认值 |
. ├── main.go # 主入口,路由配置 ├── config.go # 配置加载 ├── appwrite.go # Appwrite API 客户端 ├── jenkins.go # Jenkins API 客户端 ├── handler.go # HTTP 请求处理器 ├── go.mod # Go 模块配置 ├── .env.example # 环境变量示例 └── README.md # 文档
这个 API 封装了以下原始 curl 命令:
Appwrite 查询:
curl 'https://appwrite.yakir.wang/v1/proxy/rules?queries[0]={"method":"equal","attribute":"deploymentResourceId","values":["my-app"]}'
Jenkins 构建:
curl -X POST "https://jenkins.yakir.wang/job/web-deployment/buildWithParameters" \
--user admin:1176a9a665a18a91691749386f6d7a6be0 \
--data APP_NAME=web-app-test \
--data GIT_URL=https://gitlab.yakir.wang/test/web-app-test
.env 文件并加入 .gitignoreMIT