鸿蒙应用开发实战【90】— CI/CD本地脚本化构建与自动化测试
·
鸿蒙应用开发实战【90】— CI/CD本地脚本化构建与自动化测试
本文是「号码助手全栈开发系列」第 90 篇,持续更新中…
开源社区:https://openharmonycrossplatform.csdn.net
前言
在 HarmonyOS 开发中,持续集成和自动化构建并不需要复杂的第三方 CI 平台。通过 hvigorw 命令行工具配合脚本,就可以实现本地化的构建、测试和打包流水线。
本篇涵盖:hvigorw CLI 常用命令、构建模式(debug / release)、自动化签名打包、ohosTest 命令行跑测试、Shell 脚本串联流水线、Git hooks 触发自动化检查。

一、hvigorw CLI 基础
1.1 常用命令
# 清理构建产物
./hvigorw clean
# debug 模式构建 HAP(默认)
./hvigorw assembleHap --mode module -p module=entry -p buildMode=debug
# release 模式构建(需要配置签名)
./hvigorw assembleHap --mode module -p module=entry -p buildMode=release
# 构建 App Pack(用于上架)
./hvigorw assembleApp --mode module -p module=entry -p buildMode=release
# 查看所有可执行 task
./hvigorw tasks
1.2 构建模式对比
| 模式 | 用途 | 签名 | 产物 | 命令行 |
|---|---|---|---|---|
| debug | 开发调试 | 自动签名 | entry-debug.hap |
-p buildMode=debug |
| release | 真机/上架 | 手动签名 | entry-release.hap |
-p buildMode=release |
| release(assembleApp) | 上架 AppGallery | 手动签名 | entry-release.app |
assembleApp |
二、自动化签名配置
在 build-profile.json5 中预先配置签名信息,无需每次手动选择:
{
"app": {
"signingConfigs": [
{
"name": "my-release-sign",
"material": {
"certPath": "./signing/release.cer",
"profilePath": "./signing/release.p7b",
"keystorePath": "./signing/release.p12",
"keystorePassword": "your-keystore-pwd",
"keyAlias": "your-key-alias",
"keyPassword": "your-key-pwd"
}
}
],
"products": [
{
"name": "default",
"signingConfig": "my-release-sign"
// ...
}
]
}
}
安全提示:keystorePassword / keyPassword 建议通过环境变量注入,不要提交到 Git 仓库。
三、ohosTest 命令行测试
3.1 运行单元测试
# 运行所有 ohosTest 测试
./hvigorw runTest --target ohosTest
# 指定模块和设备运行
./hvigorw runTest --target ohosTest --module entry --device "emulator-5554"
# 只运行特定测试类
./hvigorw runTest --target ohosTest -p class=CardDaoTest
3.2 测试输出
测试结果默认输出到 build/reports/ohos_test/:
build/reports/ohos_test/
├── index.html # 测试报告(浏览器打开)
├── result.json # 结构化结果
├── screenshots/ # UI 测试截图
└── logs/ # 调试日志
四、Shell 流水线脚本
4.1 完整构建脚本
#!/bin/bash
# build-release.sh — 一键 release 构建 + 测试
set -e
echo "===== 1. Clean ====="
./hvigorw clean
echo "===== 2. Run Tests ====="
./hvigorw runTest --target ohosTest || {
echo "⚠️ 测试失败,查看报告:build/reports/ohos_test/index.html"
exit 1
}
echo "===== 3. Build Release HAP ====="
./hvigorw assembleHap --mode module -p module=entry -p buildMode=release
echo "===== 4. Build App Pack ====="
./hvigorw assembleApp --mode module -p module=entry -p buildMode=release
echo "✅ 构建完成!产物位置:"
ls -lh build/default/outputs/default/*.{hap,app} 2>/dev/null
4.2 版本号自动更新
#!/bin/bash
# bump-version.sh — 自动更新 versionCode 和 versionName
# 从 Git tag 读取版本
GIT_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "1.0.0")
# 解析 .app.json5 并更新
VERSION_CODE=$(echo "$GIT_TAG" | awk -F. '{printf "%d%02d%02d", $1, $2, $3}')
VERSION_NAME="$GIT_TAG"
sed -i '' "s/\"versionCode\": [0-9]*/\"versionCode\": $VERSION_CODE/" AppScope/app.json5
sed -i '' "s/\"versionName\": \".*\"/\"versionName\": \"$VERSION_NAME\"/" AppScope/app.json5
echo "✅ 版本号已更新:$VERSION_NAME (code = $VERSION_CODE)"
五、Git Hooks 自动化
5.1 pre-commit 检查
在 .husky/pre-commit 或 .git/hooks/pre-commit 中添加:
#!/bin/sh
echo "🔍 Pre-commit 检查中..."
# 检查是否有 .ets/.ts 文件改动
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(ets|ts)$')
if [ -n "$STAGED_FILES" ]; then
echo "📐 运行 ArkTS 格式检查..."
# 这里可以调用 ArkTS linter 或格式化工具
fi
# 确保没有 console.log 提交(生产环境)
if git diff --cached | grep -E "^\+.*console\.(log|debug)" > /dev/null; then
echo "❌ 提交中包含 console.log,请移除后重新提交"
exit 1
fi
echo "✅ Pre-commit 检查通过"
5.2 GitLab CI / GitHub Actions 集成
# .gitlab-ci.yml 示例
stages:
- build
- test
- deploy
build-release:
stage: build
script:
- ./hvigorw assembleHap --mode module -p module=entry -p buildMode=release
artifacts:
paths:
- build/default/outputs/default/*.hap
六、构建流程示意图
开发 → git commit
↓
pre-commit ← 代码风格、console.log 检查
↓
git push
↓
CI Server (GitLab CI / 本地脚本)
├── hvigorw clean
├── hvigorw runTest --target ohosTest
├── hvigorw assembleHap --mode module -p buildMode=release
└── 产物归档
小结
| 环节 | 工具/命令 | 用途 |
|---|---|---|
| 本地构建 | hvigorw assembleHap |
debug / release 两种模式 |
| 签名配置 | build-profile.json5 signingConfigs | 自动化签名 |
| 测试 | hvigorw runTest |
ohosTest 命令行运行 |
| 脚本串联 | Shell / Hooks | clean → test → build → archive |
| CI 集成 | GitLab CI / GitHub Actions | 远程自动构建 |
| 版本管理 | 脚本自动更新 versionCode/versionName | 避免人为错误 |
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
- 开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
- Hvigor 构建系统文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hvigor
- HarmonyOS 官方文档:https://developer.huawei.com/consumer/cn/doc/
- HarmonyOS hilog文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/hilog
- HarmonyOS testing:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/unit-test
更多推荐




所有评论(0)