![]()
![]()
![]()
![]()
![]()
掌握 Hvigor 命令行构建、搭建 Jenkins/GitLab CI 流水线、落地多环境配置与自动化测试、实现一键签名打包发布
一、前置思考:从"手动发版"到"流水线交付"
1.1 手动发版的痛点
| 手动环节 | 风险 | 耗时 |
|---|
| 本地构建 | 环境差异(“我这能跑”) | 10 分钟 |
| 手动测试 | 遗漏回归 | 数小时 |
| 手动签名 | 密钥泄露/混淆 | 分钟级 |
| 手动发布 | 版本错乱 | 分钟级 |
核心认知:手动流程的每一步都是不确定性的来源——环境差异、漏测、人为失误。
CI/CD 的价值不是"快",而是确定性:同样的代码,永远产出同样的产物。
1.2 CI/CD 的价值
| 维度 | 手动 | CI/CD |
|---|
| 构建一致性 | 依赖本地环境 | 统一环境 |
| 回归保障 | 靠自觉 | 自动化必测 |
| 发布速度 | 天级 | 分钟级 |
| 可追溯 | 无 | 全链路记录 |
| 质量门禁 | 无 | 自动拦截 |
二、核心原理:流水线阶段
2.1 标准流水线
代码提交 → 触发流水线 │ ├─ Stage1 静态检查: Lint / 代码规范 ├─ Stage2 单元测试: 关键模块单测 ├─ Stage3 构建: Hvigor 命令行出包 ├─ Stage4 自动化测试: UI/性能压测 ├─ Stage5 质量门禁: 崩溃率/体积/性能阈值 ├─ Stage6 签名打包: 自动签名 ├─ Stage7 发布: 上传商店/分发平台 └─ Stage8 通知: 结果推送团队
2.2 流水线设计的核心原则
| 原则 | 说明 |
|---|
| 快反馈 | 提交 10 分钟内出结果 |
| 门禁前置 | 便宜的门禁放前面 |
| 并行化 | 独立阶段并行执行 |
| 可重放 | 同一提交可重复构建 |
| 产物不可变 | 构建产物带版本指纹 |
三、源码/API 深度解析:核心能力
3.1 Hvigor 命令行构建
# 命令行构建(CI 无 UI 环境)hvigorw clean# 清理hvigorw assembleHap# 构建 HAPhvigorw assembleHap--modemodule-pproduct=default hvigorw signHap# 签名hvigorw--sync# 同步工程# 常用参数hvigorw assembleHap--parallel# 并行hvigorw assembleHap--daemon# 守护进程hvigorw assembleHap--modemodule# 模块级hvigorw assembleHap-pbuildMode=release# 构建模式
CI 关键:命令行构建必须可重复、无交互——所有参数通过命令行/配置文件传入。
3.2 多环境配置
不同环境(debug/test/release)需要不同配置:
// build-profile.json5 多环境 { "app": { "products": [ { "name": "dev", "signingConfig": "dev_sign", "compatibleSdkVersion": "5.0.0(12)", "runtimeOS": "HarmonyOS", "buildModeSet": [{ "name": "debug" }] }, { "name": "test", "signingConfig": "test_sign", "buildModeSet": [{ "name": "release" }] }, { "name": "release", "signingConfig": "release_sign", "buildModeSet": [{ "name": "release" }] } ] } }
环境矩阵:
| 维度 | dev | test | release |
|---|
| API 地址 | 测试环境 | 测试环境 | 生产环境 |
| 日志级别 | debug | info | warn+ |
| 混淆 | 关 | 开 | 开 |
| 签名 | dev 证书 | test 证书 | release 证书 |
| 崩溃上报 | 全量 | 全量 | 采样 |
3.3 自动化测试集成
// 单元测试(ohosTest)import{describe,it,expect}from'@ohos/hypium';exportdefaultfunctionorderTest(){describe('OrderDomainTest',()=>{it('calc_total_correct',0,()=>{consttotal=calcOrderTotal([100,200,300]);expect(total).assertEqual(600);});it('discount_apply',0,()=>{consttotal=calcOrderTotal([100],0.8);expect(total).assertEqual(80);});});}
# 命令行跑测试hvigorwtesthvigorw ohosTest
CI 测试分层:
| 层级 | 内容 | 速度 |
|---|
| 单测 | 领域逻辑/工具 | 秒级 |
| 组件测试 | 组件交互 | 分钟级 |
| UI 测试 | 页面流程 | 分钟级 |
| 性能压测 | 启动/内存/卡顿 | 十分钟级 |
3.4 签名管理
| 实践 | 说明 |
|---|
| 证书分环境 | dev/test/release 独立证书 |
| 密钥保护 | 证书放 CI 密钥库, 不进代码仓库 |
| 自动签名 | 流水线内 signHap 自动签名 |
| 签名校验 | 发布前自动校验签名 |
| 证书过期监控 | 到期前告警 |
四、企业级实战:流水线搭建
4.1 Jenkins / GitLab CI 架构
Git 提交 (Merge Request) │ 触发 webhook ▼ CI Runner (构建机) ├─ Stage1 lint (静态检查) ├─ Stage2 unit test (单测) ├─ Stage3 assemble (Hvigor 构建) ├─ Stage4 ui test (UI 自动化) ├─ Stage5 perf gate (性能门禁) ├─ Stage6 sign (自动签名) └─ Stage7 publish (发布 + 通知)
4.2 质量门禁矩阵
| 门禁 | 规则 | 拦截级别 |
|---|
| 编译 | 编译失败 | 阻断 |
| 单测 | 通过率 < 95% | 阻断 |
| Lint | 严重告警 > 0 | 阻断 |
| 体积 | 超基线 + 2MB | 告警 |
| 性能 | 启动超基线 | 阻断 |
| 崩溃 | 回归版本对比 | 阻断 |
4.3 多版本并行构建
同一时间多个分支同时构建: develop 分支 → dev 包 (每日) release/1.3 分支 → test 包 (提测) master 分支 → release 包 (发布) hotfix 分支 → 热修包 (紧急)
并行策略:
- 每个 MR 触发独立流水线;
- 分支合并前必须门禁全绿;
- 发布分支锁定(只允许合并经过验证的代码)。
4.4 持续交付闭环
开发 → 提测包(自动) → 测试通过 → 灰度包(自动) → 灰度监控(崩溃/性能) → 全量发布(自动) → 回滚预案
| 环节 | 自动化程度 |
|---|
| 提测包 | 100% 自动 |
| 灰度发布 | 自动 + 人工确认 |
| 全量发布 | 自动 + 门禁 |
| 回滚 | 一键回滚(版本表) |
五、排查与优化:流水线效率
5.1 流水线瓶颈定位
| 瓶颈 | 特征 | 对策 |
|---|
| 构建慢 | Stage3 耗时 60%+ | 编译缓存/并行(第 38 篇联动) |
| 测试慢 | 全量测试耗时长 | 分层 + 并行 + 增量 |
| 环境不稳定 | 偶发失败 | 环境容器化 |
| 门禁误报 | 频繁告警 | 阈值校准 |
| 排队 | 构建机不足 | 扩容/负载均衡 |
5.2 高频坑点速查
六、总结与进阶
6.1 收益模型(参考实测)
| 指标 | 手动 | CI/CD |
|---|
| 发版周期 | 3 天 | 4 小时 |
| 回归缺陷率 | 8% | 1.2% |
| 构建一致性 | 不保证 | 100% |
| 发布回滚 | 手动 | 一键 |
| 团队等待 | 阻塞式 | 异步 |
6.2 工程规范
- 一切可脚本化:构建/测试/签名/发布全部脚本化;
- 门禁强制:质量门禁是发布的唯一通行证;
- 环境隔离:dev/test/release 严格隔离;
- 可追溯:每个产物对应代码提交哈希;
- 持续演进:流水线本身纳入版本管理。
6.3 进阶方向
- 流水线即代码:Jenkinsfile/GitLab CI 配置入库;
- 容器化构建:Docker 统一构建环境;
- 性能门禁自动化:压测脚本接入(第 41 篇联动);
- 自动发版机器人:版本/更新日志自动生成。
附:Demo 演示说明
| Tab | 演示内容 |
|---|
| 🔧 流水线 | 8 阶段流水线可视化 + 门禁关卡演示 |
| 🏗️ Hvigor CLI | 命令行构建命令速查 + 执行模拟 |
| 🌍 多环境 | dev/test/release 环境配置矩阵对比 |
| 🧪 自动化测试 | 单测/UI/性能测试分层 + 门禁规则 |
| 📦 发布管理 | 签名/灰度/全量/回滚 发布流程演示 |