Tauri 2 自动更新实战:结合GitHub Actions与阿里云OSS实现全自动发布
如今的软件更新频率极快,许多 AI 工具几乎每天都有新版本,例如 Codex、Claude、Trae 等。若每次都需要用户手动前往官网下载,体验将十分糟糕。
因此,“自动更新”已成为标配功能。
其常见逻辑是:后台静默下载新版本,待下载完成后显示更新图标,用户点击即可完成升级。
如果采用手动发布,用户很可能错过更新,因此需要为应用引入自动更新机制。
这一功能在思路上并不复杂:定期检查新版本、自动下载并在界面提醒,随后覆盖旧版本。但实际落地时,主要挑战在于配置环节。
本方案以 Tauri 2 + Rust 开发的应用为例,借助框架自带的 tauri-plugin-updater 插件,代码部分得以大幅简化;只需合理配置工作流,即可快速实现。
1、整体架构
先来看一下整体的结构:
开发者打 tag (vX.Y.Z)
│
▼
GitHub Actions (.github/workflows/release.yml)
├─ tauri build --bundles nsis 产出 JCode_X.Y.Z_x64-setup.exe
├─ 用私钥签名 产出同名 .sig
├─ 生成 latest.json(含 version / signature / url)
└─ ossutil 上传到阿里云 OSS
│
▼
阿里云 OSS oss://<bucket>/<prefix>/updater/ (本项目 prefix=jcode)
├─ latest.json ← 客户端轮询这个
└─ JCode_X.Y.Z_x64-setup.exe(.sig) ← 各历史版本安装包
│
▲
JCode 客户端(tauri-plugin-updater)
启动 + 每 6 小时静默 check()
→ 有新版 → 后台 download() → 校验签名
→ 模式A:显示「重启更新」图标,点击 install()+relaunch()
→ 模式B:收进托盘时自动 install()+relaunch()
这里涉及两个关键平台:GitHub Actions 负责自动编译生成安装包,阿里云 OSS 负责存储安装包与版本信息。配置完成后,只需推送标签,即可自动触发整个流程;用户端只需点击更新按钮即可完成升级。
为了保障更新的安全性与自动化,还引入了非对称密钥签名和工作流。整个机制与工作流均已实现,但需要开发者自行完成 GitHub 与阿里云 OSS 的关键配置。
以下是详细的配置步骤:

尽管概念简单,在实际操作中仍会面临许多细节。尤其是在不熟悉的平台上,容易产生畏难情绪。下面将逐步攻克这些配置难点。
2、阿里云 OSS 配置
阿里云 OSS 配置相对繁琐,后台选项众多,容易让人迷失。
2.1 几个概念先理清
- OSS(对象存储):阿里云的文件托管服务,将文件上传后即可通过公网 URL 下载。本方案用它存放安装包与更新清单。
- Bucket(存储桶):OSS 的顶层命名空间,名称全局唯一。本手册使用
jrelease。 - 项目前缀(
OSS_PREFIX):桶内为各个软件划分的专属目录,例如jcode。一个桶可借助不同前缀同时托管多个应用的更新包,互不干扰。 - 地域 / Endpoint:Bucket 所在机房,如杭州为
oss-cn-hangzhou.aliyuncs.com。建议选择离主要用户近的地域以提升下载速度。 - 读写权限(ACL):为允许任何人匿名下载,需将 Bucket 设置为公共读。
- AccessKey:由
AccessKey ID和AccessKey Secret组成,相当于“账号密码”,CI 利用它来上传文件。
App 最终下载使用的公网地址格式如下(<前缀> 即 jcode,请留意此格式):
https://<Bucket>.<地域Endpoint>/<前缀>/updater/<文件名>
例如:https://jrelease.oss-cn-hangzhou.aliyuncs.com/jcode/updater/latest.json
2.2 创建 Bucket
登录阿里云 OSS 控制台。
点击 创建 Bucket:
- Bucket 名称:填写
jrelease(桶名仅支持小写字母、数字和连字符,且全局唯一。若该名称已被占用,可更换并同步修改后文所有相关桶名)。 - 地域:选择离用户较近的节点,如“华东1(杭州)”。请记住所选地域。
- 读写权限:选择公共读。
- 其余选项保持默认,完成创建。
- Bucket 名称:填写
具体操作
在对象存储 OSS 下,创建 Bucket:

填写名称并选择分区:

桶名在此处为 jrelease,后面会多次用到。其他复杂选项暂不处理,直接完成创建。
修改访问权限:

先进入权限控制,关闭“阻止公共访问”。
再调整读写配置:

将其改为“公共读”。
获取必要信息:

截图中可看到 Endpoint 和 Bucket 域名。
这一步主要是为了收集下表中的四项数值:
| Name | 值(本手册示例) | 来源 / 说明 |
|---|---|---|
OSS_ACCESS_KEY_ID | 子账号的 AccessKey ID | 2.3 步保存 |
OSS_ACCESS_KEY_SECRET | 子账号的 AccessKey Secret | 2.3 步保存 |
OSS_ENDPOINT | oss-cn-hangzhou.aliyuncs.com | 您 Bucket 的地域(不带 https://) |
OSS_BUCKET | jrelease | 您的 Bucket 名 |
OSS_PUBLIC_BASE | https://jrelease.oss-cn-hangzhou.aliyuncs.com | Bucket + 地域拼成的公网前缀(带 https://,只到桶根、不含 jcode) |
OSS_PREFIX | jcode | 项目在桶内的前缀目录;CI 会将其上传至 <OSS_PREFIX>/updater/ |
表格中最上面的两个值还需通过其他方式获取,下面进行说明。
2.3 RAM 用户 + 密钥 + 授权
由于需要通过 API 操作 OSS,必须拥有访问密钥和相应授权。这一步主要是为了获得 AccessKey。直接使用主账号风险较高,推荐创建一个仅具备 OSS 权限的子账号:
- 进入 RAM 访问控制控制台 → 创建用户。
- 勾选 「OpenAPI 调用访问」(会生成 AccessKey),登录密码可以不勾。
- 创建成功后立即保存
AccessKey ID和AccessKey Secret(Secret 仅显示一次)。
- 为该用户授权:进入用户详情 → 添加权限 → 添加
AliyunOSSFullAccess(或更精细地自定义仅限该 Bucket 的读写策略)。
具体操作
打开身份管理,创建一个用户(例如 release),然后选中该用户并进入凭证管理。

点击创建 AccessKey:

在多种方式中,选择“其他”继续创建。

请下载 CSV 文件或复制保存 ID 与 Secret。同时根据安全建议,可勾选最大闲置时间。
获取访问信息后,进入权限管理。

新增授权:

搜索 OSS,勾选 AliyunOSSFullAccess,确认新增授权。至此,子账号、密钥与授权全部配置完成,成功获取到 ID 和 Secret。
3、GitHub 配置
OSS 配置完成后,即可在 GitHub 中设置必要的 Secrets。步骤相对简单:打开托管在 GitHub 上的项目,进入 Settings -> Secrets and variables -> Actions:

点击 New repository secret,逐一添加上文表格中的对应值即可。
5、自动化编译
所有配置就绪后,即可实现自动打包发布。鉴于环节较多,建议逐项核对清单,确保每一步都已到位。
配置阶段(一次性):
- 私钥已配置到 GitHub Secret
TAURI_SIGNING_PRIVATE_KEY - 创建空的
TAURI_SIGNING_PRIVATE_KEY_PASSWORD - 私钥文件已另外备份
- 阿里云已建好 Bucket,权限为公共读
- RAM 子账号与 AccessKey 已创建并授权 OSS
- 6 条 OSS Secrets 全部填写(含
OSS_PREFIX=jcode) -
tauri.conf.json中的 endpoint = 桶根 +jcode前缀 +/updater/latest.json,与上传路径一致
每次发版(重复执行):
- 修改
tauri.conf.json和Cargo.toml中的version(必须高于上一版本) -
git push提交代码 -
git tag v0.9.x && git push origin v0.9.x - 查看 GitHub Actions 运行结果(绿色即成功)
- 前往 OSS 确认
jcode/updater/latest.json与新.exe已就位
确认配置正确后,每次发版只需修改版本号、推送代码、添加标签并推送标签。一旦推送以 v 开头的标签,就会自动触发构建:

随后工作流按设定步骤执行。构建与签名阶段耗时较长,实测约需 18 分钟,其余步骤则很快。

由于配置较复杂,初期可能会遇到编译失败,经过几次调整后成功发布 v0.9.10。
成功后,安装包和配置文件会自动上传至阿里云 OSS:

至此,自动化构建与发布流程搭建完毕。
6、软件更新
安装一个支持自动更新的版本(如 v0.9.10),随后发布更新版本 v0.9.11,旧版客户端将自动检测到新版本并给出提示:
右上角会出现明显的更新按钮:

设置页面也会显示更新提示:

点击按钮即可自动完成更新,无需完整安装流程,瞬间完成。由于软件体积很小,即使全量覆盖也非常迅速,体验流畅。
通过上述流程,开发者可为 Tauri 2 应用轻松构建全自动的更新发布渠道。