logo
0
0
WeChat Login

Appwrite Proxy Query API

一个基于 Go Gin 的 API 服务,提供以下功能:

  1. 查询 Appwrite 自托管版中部署资源(Site、Function 等)的域名
  2. 触发 Jenkins 构建任务

功能特性

Appwrite 功能

  • 通过 app 名称快速查询对应的域名
  • 支持查询不同类型的资源(site、function 等)
  • 提供简单的域名列表查询和完整的 proxy rules 查询

Jenkins 功能

  • 触发 Jenkins 构建任务
  • 支持标准参数(APP_NAME、GIT_URL)
  • 支持自定义参数构建

快速开始

1. 安装依赖

go mod download

2. 配置环境变量

复制 .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:

  1. 打开浏览器访问 Appwrite Console
  2. 打开开发者工具 (F12)
  3. 在 Application/Storage/Cookies 中找到 a_session_console 的值
  4. 复制该值到 APPWRITE_SESSION

获取 Jenkins Token:

  1. 登录 Jenkins
  2. 点击右上角用户名 → Configure
  3. 在 API Token 部分生成新 Token
  4. 复制到 JENKINS_TOKEN

3. 运行服务

go run .

或构建后运行:

go build -o appwrite-proxy-query
./appwrite-proxy-query

API 使用

1. Appwrite - 查询域名

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"]
}

2. Appwrite - 查询完整 Proxy Rules

curl "http://localhost:8080/api/v1/proxy-rules?app_name=my-app"

3. Jenkins - 触发构建

基本用法(使用默认 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 队列 ID
  • queue_url: Jenkins 队列 URL
  • build_id: 构建 ID(实际的构建编号,通过轮询队列 API 获取)
  • build_url: 构建详情页面 URL

注意: 获取构建 ID 需要等待 Jenkins 从队列中启动构建,API 会自动轮询最多 30 秒。如果 30 秒内构建未启动,build_id 将为 0。

4. Jenkins - 自定义参数构建

如果你的 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"
    }
  }'

5. Jenkins - 查询构建状态

传入构建 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: 构建开始时间戳(毫秒)

6. 健康检查

curl http://localhost:8080/health

API 端点总结

方法端点描述
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健康检查

参数说明

Appwrite 查询参数

参数类型必填说明默认值
app_namestring应用名称/资源 ID-
resource_typestring资源类型 (site/function)site

Jenkins 构建参数

参数类型必填说明默认值
app_namestring应用名称-
git_urlstringGit 仓库地址-
job_namestringJenkins Job 名称配置中的默认值

项目结构

.
├── main.go         # 主入口,路由配置
├── config.go       # 配置加载
├── appwrite.go     # Appwrite API 客户端
├── jenkins.go      # Jenkins API 客户端
├── handler.go      # HTTP 请求处理器
├── go.mod          # Go 模块配置
├── .env.example    # 环境变量示例
└── README.md       # 文档

等效的 curl 命令

这个 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

注意事项

  1. Token 安全:不要将 Token 提交到代码仓库中,使用 .env 文件并加入 .gitignore
  2. Token 过期:Appwrite Session Token 会过期,需要定期更新
  3. 权限要求:需要有相应的权限才能查询和触发构建
  4. 生产环境:建议使用更安全的认证方式

许可证

MIT

About

appwrite-api封装

Language
Go96.5%
Dockerfile3.5%