鸿蒙应用开发实战【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 避免人为错误

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

Logo

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

更多推荐