鸿蒙应用开发实战【90】— CI/CD本地脚本化构建与自动化测试

鸿蒙应用开发实战【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--modemodule-pmoduleentry-pbuildModedebug# release 模式构建需要配置签名./hvigorw assembleHap--modemodule-pmoduleentry-pbuildModerelease# 构建 App Pack用于上架./hvigorw assembleApp--modemodule-pmoduleentry-pbuildModerelease# 查看所有可执行 task./hvigorw tasks1.2 构建模式对比模式用途签名产物命令行debug开发调试自动签名entry-debug.hap-p buildModedebugrelease真机/上架手动签名entry-release.hap-p buildModereleasereleaseassembleApp上架 AppGallery手动签名entry-release.appassembleApp二、自动化签名配置在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--targetohosTest# 指定模块和设备运行./hvigorw runTest--targetohosTest--moduleentry--deviceemulator-5554# 只运行特定测试类./hvigorw runTest--targetohosTest-pclassCardDaoTest3.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-eecho 1. Clean ./hvigorw cleanecho 2. Run Tests ./hvigorw runTest--targetohosTest||{echo⚠️ 测试失败查看报告build/reports/ohos_test/index.htmlexit1}echo 3. Build Release HAP ./hvigorw assembleHap--modemodule-pmoduleentry-pbuildModereleaseecho 4. Build App Pack ./hvigorw assembleApp--modemodule-pmoduleentry-pbuildModereleaseecho✅ 构建完成产物位置ls-lhbuild/default/outputs/default/*.{hap,app}2/dev/null4.2 版本号自动更新#!/bin/bash# bump-version.sh — 自动更新 versionCode 和 versionName# 从 Git tag 读取版本GIT_TAG$(gitdescribe--tags--abbrev02/dev/null||echo1.0.0)# 解析 .app.json5 并更新VERSION_CODE$(echo$GIT_TAG|awk-F.{printf %d%02d%02d, $1, $2, $3})VERSION_NAME$GIT_TAGsed-is/\versionCode\: [0-9]*/\versionCode\:$VERSION_CODE/AppScope/app.json5sed-is/\versionName\:\.*\/\versionName\:\$VERSION_NAME\/AppScope/app.json5echo✅ 版本号已更新$VERSION_NAME(code $VERSION_CODE)五、Git Hooks 自动化5.1 pre-commit 检查在.husky/pre-commit或.git/hooks/pre-commit中添加#!/bin/shecho Pre-commit 检查中...# 检查是否有 .ets/.ts 文件改动STAGED_FILES$(gitdiff--cached--name-only --diff-filterACM|grep-E\.(ets|ts)$)if[-n$STAGED_FILES];thenecho 运行 ArkTS 格式检查...# 这里可以调用 ArkTS linter 或格式化工具fi# 确保没有 console.log 提交生产环境ifgitdiff--cached|grep-E^\.*console\.(log|debug)/dev/null;thenecho❌ 提交中包含 console.log请移除后重新提交exit1fiecho✅ Pre-commit 检查通过5.2 GitLab CI / GitHub Actions 集成# .gitlab-ci.yml 示例stages:-build-test-deploybuild-release:stage:buildscript:-./hvigorw assembleHap--mode module-p moduleentry-p buildModereleaseartifacts: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 buildModerelease └── 产物归档小结环节工具/命令用途本地构建hvigorw assembleHapdebug / release 两种模式签名配置build-profile.json5 signingConfigs自动化签名测试hvigorw runTestohosTest 命令行运行脚本串联Shell / Hooksclean → test → build → archiveCI 集成GitLab CI / GitHub Actions远程自动构建版本管理脚本自动更新 versionCode/versionName避免人为错误如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.netHvigor 构建系统文档https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hvigorHarmonyOS 官方文档https://developer.huawei.com/consumer/cn/doc/HarmonyOS hilog文档https://developer.huawei.com/consumer/cn/doc/harmonyos-references/hilogHarmonyOS testinghttps://developer.huawei.com/consumer/cn/doc/harmonyos-guides/unit-test