大家好我是徐徐。今天主题是如何使用 CI/CD 自动构建发布 Tauri 应用。
Tauri 是一个跨平台的客户端框架,体积小而且很精悍,如果做个人应用,再合适不过了。不过要想丝滑的发布自己的应用,还需要想想办法,不可能每次发布都依赖自己的本地环境去做打包发布变更,主要原因是你很难做到同时拥有多种操作系统的设备。为了解决这个问题,最近研究了一下如何用 CI/CD 去打包构建和发布 Tauri 应用,让这种桌面客户端的发布如 Web 端的发布一样简单流畅。
这里先简单概述一下 CI/CD 的流程,因为有的小伙伴不一定知道 CI/CD 。
上图是一个最简单的CI / CD的流程图,大概逻辑就是开发者提交代码之后版本控制系统(如 Git)触发CI / CD流程,通过代码检出,构建应用等关键动作自动化完成整个发布。当然在一些工程化的体系中还可能加很多其他节点,比如代码分析,各种测试(单元测试、集成测试、性能测试等),发布卡点设计,发布通知等,不过我们这里只实现最核心的流程节点。
上面讲到了 CI/CD 的基本流程,我们现在需要了解几个常见的 CI/CD 工具,然后根据自己的场景去选择合适的工具完成相应的工作,下面几个常见的工具可供大家选择。
三个工具我都用过,用得最多的是 GitHub Actions,其余两个有会在工作中用到,企业级的应用基本都会用到Gitlab CI 或者 Jenkins。如果是个人应用或者开源项目,可以无脑选择 GitHub Actions,免费好用,支持的环境多样,而且配置门槛低,所以我选择 GitHub Actions。
在进行配置前,我们需要梳理一下整个构建的动作,这里的构建动作就跟我们本地开发一样,但是更加细致化一些,大概的流程如下。
上面提到的步骤,我们需要用 GitHub Actions 的脚本来实现,下面我们就来看看具体的实现。
name: Build and release
on:
push:
branches: [feature-testci]
workflow_dispatch:
jobs:
release:
permissions:
contents: write
actions: write
attestations: write
deployments: write
packages: write
id-token: write
strategy:
fail-fast: false
matrix:
platform: [macos-latest, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
## 检出存储库
- name: Checkout repository
uses: actions/checkout@v4
## 设置 rust 环境
- name: Rust setup
uses: dtolnay/rust-toolchain@stable
## rust 缓存
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
## 设置 node 环境
- name: Sync node version and setup cache
uses: actions/setup-node@v4
with:
node-version: 'lts/*'
## 全局安装pnpm
- name: Install pnpm
run: npm install -g pnpm
## 安装前端依赖
- name: Install frontend dependencies
run: pnpm install
## 构建应用
- name: Build the app
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: ${{ github.ref_name }}
releaseName: 'XTools v__VERSION__'
releaseBody: 'See the assets to download and install this version.'
releaseDraft: true
prerelease: false我大概解释一下整个脚本的意思。
name: Build and release
on:
push:
branches: [feature-testci]
workflow_dispatch:这个工作流的名称是 "Build and release"。它会在两种情况下触发:
1.当推送的分支为 feature-testci 时
2.通过手动触发(workflow_dispatch)
jobs:
release:
permissions:
contents: write
actions: write
attestations: write
deployments: write
packages: write
id-token: write
strategy:
fail-fast: false
matrix:
platform: [macos-latest, windows-latest]
runs-on: ${{ matrix.platform }}定义了一个名为 "release" 的作业。权限有6个写的权限,使用矩阵策略在 macOS 和 Windows 最新版本上运行。
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: ${{ github.ref_name }}
releaseName: 'XTools v__VERSION__'
releaseBody: 'See the assets to download and install this version.'
releaseDraft: true
prerelease: false这部分配置了发布的详细信息,包括使用的 GitHub 令牌、标签名、发布名称、发布说明等,这里用作测试,创建一个草稿版本,不是预发布版本。
如果一切顺利的话,当你push feature-testci 这个分支的时候会出现如下两张图: 
一张图是Action的构建过程,两个平台都构建完成了;一张图是生成的安装包,两个平台的包都有了。
其实这个里面有的时候会遇到一些问题,最主要的问题是权限的问题。GitHub 环境令牌,此令牌默认只有读取权限,在运行工作流时你可能会收到“Resource not accessible by integration”错误。
这个需要在设置里面配置相应的权限,在Action—General的最下方 

CI/CD 生成的开源包一般都会被阻止打开,所以Windows 直接仍要运行就行,Mac 去隐私设置里面尝试再打开软件就可以,原因是没有证书签名的软件都会被拦截。
https://github.com/Xutaotaotao/XTools/tree/feature-testci
CI/CD 在前端开发中非常重要,本文简单的讲述了使用 CI/CD 自动构建发布 Tauri 桌面端应用的全过程,通过自动化的发布不仅能大大提高我们的发布效率,还能保证不同平台的一致性,如果是个人开发者或者开源项目,非常适合使用这种方式发布。