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%