4.5 KiB
双平台发布(Gitee + EzHub)
平台
| 地址 | 类型 | |
|---|---|---|
| Gitee | git@gitee.com:xmz7891/ykxmz.git |
Gitee(API v5) |
| EzHub | ssh://git@git.261826.xyz/xmz/ykxmz.git |
Gitea 1.22.0(API v1) |
本地 remote 已配好:origin = Gitee,ezhub = EzHub。
一次性配置(需要你操作两件事)
1. 把 SSH 公钥加到 EzHub
我已经生成了一把专用于 EzHub 的密钥(不复用 Gitee 那把,权限隔离):
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMFMh2Zqwm+8KFhU3DhzhOO5Sx7cIzybYqUsrbt1c3ly ykxmz-ezhub
操作:EzHub 网页 → 右上角头像 → 设置 → SSH / GPG 密钥 → 增加密钥 → 把上面那一整行粘进去 → 保存。
⚠️ 实测状态(2026-10-07):公钥加过一次,但服务端仍拒绝。 报错:\Permission denied (publickey,password)> 本机送出的指纹:\SHA256:Acmu49YQcjw3m5WefOXSBzYNY2WPHLL2vvhnlYRAttA> 请到 EzHub 确认那条密钥的内容和上面完全一致(一个字符都不能差), 并且加在正确的账号下。
在你修好之前,可以先用令牌走 HTTPS 推: \powershell python _build\ezhub_push.py <令牌> > (令牌存在仓库外的 %USERPROFILE%.ykxmz\ezhub_token\)
本机配置(已写好,不用你管):
# ~/.ssh/config
Host git.261826.xyz
HostName git.261826.xyz
User git
IdentityFile ~/.ssh/id_ed25519_ezhub
IdentitiesOnly yes
ServerAliveInterval 30
2. 生成 EzHub 的 API 令牌
SSH 密钥只能推代码,建发行版必须要令牌。
操作:EzHub 网页 → 设置 → 应用 → 生成令牌
→ 名称随便(比如 ykxmz-release)→ 权限勾 write:repository → 生成 → 复制。
⚠️ 只勾读权限是不行的(实测踩过)。 Gitea 的令牌如果只有读权限:能读仓库、能列发行版,看起来一切正常, 但一推代码就
403 Forbidden、一建发行版也 403。 Gitea 会把原因写在响应里:token does not have at least one of required scope(s): [write:repository]提前探一下(无副作用):
python _build\probe_token.py <令牌>原理:对一个不存在的发行版发 DELETE。
403= 缺写权限;404= 有写权限(只是资源不存在)。
令牌只从命令行传给脚本,不落盘、不进仓库。
_build/ezhub_push.py会把它存到%USERPROFILE%\.ykxmz\ezhub_token(仓库外),不会进版本库。
日常发布
cd C:\Users\shu\Desktop\deepseekagent\LanRemote
# 先演练(不真的发,只看会做什么)
python _build\release_all.py <gitee令牌> <ezhub令牌> 1.8.0 --dry
# 确认无误再正式发
python _build\release_all.py <gitee令牌> <ezhub令牌> 1.8.0
脚本会依次做:
- 前置检查
- 三个产物在不在(安装包 exe / 服务端 zip / 手表 apk)
- 从
CHANGELOG.md取这个版本的更新说明 - 工作区干不干净(不干净就拒绝 —— 否则推上去的和测过的不是一份)
- 对外口径检查:更新说明里出现管理页字眼直接拒绝
- 推代码到
origin和ezhub - 建发行版并传三个附件到两个平台
- 打印两边发行版地址
两个平台的接口差别(写代码时容易错的地方)
| 项目 | Gitee | Gitea / EzHub |
|---|---|---|
| API 前缀 | /api/v5/repos/... |
/api/v1/repos/... |
| 认证方式 | 参数 access_token |
请求头 Authorization: token <t> |
| 传附件路径 | /releases/{id}/attach_files |
/releases/{id}/assets?name=<文件名> |
| 附件字段名 | file |
attachment |
| 草稿/预发布 | 只有 prerelease |
draft + prerelease |
最容易踩的:EzHub 的文件名要走查询参数 ?name=,
不是 Gitee 那种放 Content-Disposition 里。
单独发某一个平台
# 只发 EzHub
python _build\ezhub_release.py <ezhub令牌> 1.8.0
# 只发 Gitee
python _build\gitee_release.py <gitee令牌> 1.8.0
注意事项
- 私钥在
~/.ssh/,仓库外,不会进版本库。 已用git ls-files确认过。 - 令牌不要提交到仓库,也不要写进任何脚本。
- 发行版说明只放更新内容(用户要求),脚本自动从 CHANGELOG 取, 不会套额外的标题。
- 重发同一个版本时,脚本会先按标签查已有的发行版并复用,不会报错。