在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

掌握 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         # 构建 HAP
hvigorw assembleHap --mode module -p product=default
hvigorw signHap             # 签名
hvigorw --sync              # 同步工程

# 常用参数
hvigorw assembleHap --parallel          # 并行
hvigorw assembleHap --daemon            # 守护进程
hvigorw assembleHap --mode module       # 模块级
hvigorw assembleHap -p buildMode=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';

export default function orderTest() {
  describe('OrderDomainTest', () => {
    it('calc_total_correct', 0, () => {
      const total = calcOrderTotal([100, 200, 300]);
      expect(total).assertEqual(600);
    });
    it('discount_apply', 0, () => {
      const total = calcOrderTotal([100], 0.8);
      expect(total).assertEqual(80);
    });
  });
}
# 命令行跑测试
hvigorw test
hvigorw 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 工程规范

  1. 一切可脚本化:构建/测试/签名/发布全部脚本化;
  2. 门禁强制:质量门禁是发布的唯一通行证;
  3. 环境隔离:dev/test/release 严格隔离;
  4. 可追溯:每个产物对应代码提交哈希;
  5. 持续演进:流水线本身纳入版本管理。

6.3 进阶方向

  • 流水线即代码:Jenkinsfile/GitLab CI 配置入库;
  • 容器化构建:Docker 统一构建环境;
  • 性能门禁自动化:压测脚本接入(第 41 篇联动);
  • 自动发版机器人:版本/更新日志自动生成。

附:Demo 演示说明

Tab 演示内容
🔧 流水线 8 阶段流水线可视化 + 门禁关卡演示
🏗️ Hvigor CLI 命令行构建命令速查 + 执行模拟
🌍 多环境 dev/test/release 环境配置矩阵对比
🧪 自动化测试 单测/UI/性能测试分层 + 门禁规则
📦 发布管理 签名/灰度/全量/回滚 发布流程演示
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐