上一篇我们把 VSCode 发布中心的几个关键区域拆开了。
这一篇解决的是另一种痛苦:
同一套 App 发版动作,你为什么还要一遍遍亲手点?
第一次理解流程可以靠界面。
但只要开始重复,你就会发现:
- 每次都点同样的按钮
- 每次都填同样的更新说明
- 每次都盯同样的进度
- 每次都担心是不是漏了平台
这时候真正该接手的,不是鼠标。
而是一条可以反复执行的命令。
VSCode 适合看懂流程,CLI 适合重复执行
当你开始经常发版、团队协作、想接入 CI/CD,命令行会更顺。
说白了:
界面适合理解流程,命令适合复用流程。
3 分钟开跑
第 1 步:安装 app-ship
app-ship 是独立上传引擎,不依赖 Flutter,也不依赖 VSCode。
bash
npm install -g @huoye/app-ship
app-ship platforms
app-ship init

第 2 步:生成 app-ship.yaml
配置文件生成后,把平台配置收回来,别再散在文档和聊天记录里。
yaml
publish:
pgyer:
enable: true
apiKey: '${PGYER_API_KEY}'
第 3 步:密钥放进项目级环境文件
别把明文密钥写死。
bash
PGYER_API_KEY=your-api-key
HUAWEI_CLIENT_ID=your-client-id
HUAWEI_CLIENT_SECRET=your-client-secret
HUAWEI_APP_ID=your-app-id
然后在终端里加载它:
bash
set -a
source ./.env.local
set +a
如果你要给这一步配图,最稳的做法是直接做成左右分屏:
- 左边打开
app-ship.yaml,把${VAR_NAME}引用露出来 - 右边打开终端,展示
source ./.env.local或set -a这类加载命令 - 画面底部加一句短标语:
密钥不要进仓库 - 统一用亮色主题,字体放大到手机上也看得清

第 4 步:本地先跑通一次
bash
app-ship upload -c app-ship.yaml -f ./app-release.apk --platform pgyer,huawei --changelog "修复已知问题"
关键不是命令短。
而是以后每次发版,不用再把同一套动作重新点一遍。

第 5 步:把同一条命令接进 CI/CD
本地跑通后,几乎可以原样搬进流水线:
yaml
- run: npm install -g @huoye/app-ship
- run: app-ship upload -c app-ship.yaml -f ./app-release.apk --platform pgyer,huawei --changelog "CI Build"

常用命令速查
| 场景 | 命令 |
|---|---|
| 查看平台 | app-ship platforms |
| 按配置上传 | app-ship upload -c app-ship.yaml -f ./app-release.apk |
| 指定平台 | app-ship upload -c app-ship.yaml -f ./app-release.apk --platform pgyer,huawei |
| 调试日志 | app-ship upload -c app-ship.yaml -f ./app-release.apk --platform pgyer --verbose |
CI/CD 先别一口吃成胖子:本地单平台、本地多平台、CI 单平台、CI 多平台,一步步来。
怎么算跑通
满足这几条,就算命令链路跑通了:
- 本机能执行
app-ship upload - 至少一个目标平台返回可用结果
app-ship.yaml已改成环境变量引用- 同一条命令能搬进 CI/CD
CLI 真正值钱的地方,不是更极客。
而是把一次能跑通的事,变成每次都能复用的事。
如果你也做 App 发版,你更想先把哪一步从"手点"改成"命令"?
是本地上传、打 tag 自动发版,还是按平台拆分触发?
留言告诉我,我后面把最痛的那一步继续拆开写。