Skip to content

10_Engineering/10 - 自动化构建 CI/CD

1. HarmonyOS CI/CD 概览

HarmonyOS 应用的 CI/CD 流水线主要依赖 DevEco Studio 内置工具和云端构建服务。

1.1 构建工具链

源代码 → hvigorw 构建 → 产物签名 → 测试 → 产物归档 → 发布
     (Hvigor)         (签名)        (Hypium)    (.app)      (AppGallery)

1.2 工具对比

工具用途说明
hvigorw构建/测试本地构建引擎
DevEco StudioIDE + 构建图形化构建/调试
AppGallery Connect (AGC)云端 CI/CD云端构建/分发
OpenHarmony CI开源社区 CI开源项目 CI/CD

2. DevEco Studio 本地构建

2.1 基本构建流程

bash
# 安装依赖
ohpm install

# 构建 Debug 版本
hvigorw assembleDebug

# 构建 Release 版本
hvigorw assembleRelease

# 运行测试
hvigorw testApp

# 全量构建(Clean + Assemble + Test)
hvigorw clean
hvigorw assembleRelease
hvigorw testApp --coverage

2.2 构建产物

产物路径说明
.appentry/build/outputs/app-debug/Debug 包
.appentry/build/outputs/app-release/Release 包
映射文件entry/build/outputs/app-release/mapping.txt混淆映射
APKentry/build/outputs/app-debug.apk可安装 APK
覆盖率entry/build/reports/coverage/覆盖率报告

3. AppGallery Connect CI/CD

3.1 AGC 云端构建配置

yaml
# .agconnect/agconnect-config.yaml
pipeline:
  name: "harmonyos-app-pipeline"
  stages:
    - name: "build"
      tasks:
        - task: "compile"
          settings:
            build_tool: "hvigor"
            build_type: "release"
            target: "default"
        - task: "sign"
          settings:
            signing_config: "release_certificate"
        - task: "package"
          settings:
            output_format: "app"

    - name: "test"
      tasks:
        - task: "unit_test"
          settings:
            test_framework: "hypium"
            coverage: true

    - name: "distribute"
      tasks:
        - task: "publish"
          settings:
            channel: "appgallery"
            track: "production"

3.2 AGC 构建步骤

1. 代码拉取 → Git clone
2. 依赖安装 → ohpm install
3. 代码编译 → hvigorw assembleRelease
4. 代码签名 → AGC 签名服务
5. 自动化测试 → Hypium 单元测试 + E2E
6. 产物上传 → AGC artifacts
7. 发布到 AppGallery → 人工审核或自动发布

3.3 签名配置(云端)

json5
// agconnect-service.json
{
  "app": {
    "appGallery": {
      "appId": "123456789",
      "productId": "com.example.myapp"
    },
    "signingConfigs": {
      "release": {
        "certificateFingerprint": "SHA256:AB:CD:EF:12:34:56",
        "storeFile": "release.cer",
        "keyAlias": "release_key"
      }
    }
  }
}

4. GitHub Actions / GitLab CI 集成

4.1 GitHub Actions for HarmonyOS

yaml
# .github/workflows/harmonyos-build.yml
name: HarmonyOS Build & Test

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'

      - name: Install Dependencies
        run: ohpm install

      - name: Build Debug
        run: hvigorw assembleDebug

      - name: Run Unit Tests
        run: hvigorw testApp --coverage

      - name: Upload Coverage Report
        uses: codecov/codecov-action@v3
        with:
          files: ./coverage/lcov.info

      - name: Build Release
        if: github.ref == 'refs/heads/main'
        run: hvigorw assembleRelease

      - name: Upload Artifacts
        if: github.ref == 'refs/heads/main'
        uses: actions/upload-artifact@v4
        with:
          name: harmonyos-app-release
          path: entry/build/outputs/app-release/*.app

4.2 GitLab CI 配置

yaml
# .gitlab-ci.yml
stages:
  - build
  - test
  - release

build-debug:
  stage: build
  image: node:18
  script:
    - ohpm install
    - hvigorw assembleDebug
  artifacts:
    paths:
      - entry/build/outputs/app-debug/
    expire_in: 1 week

unit-test:
  stage: test
  image: node:18
  script:
    - ohpm install
    - hvigorw testApp
  artifacts:
    reports:
      coverage_report:
        coverage_format: cobertura
        path: coverage/cobertura-coverage.xml

build-release:
  stage: release
  image: node:18
  script:
    - ohpm install
    - hvigorw assembleRelease
  only:
    - main

5. 多环境自动化构建

5.1 多环境构建流水线

yaml
# CI Pipeline - 多环境构建
stages:
  - build_dev
  - test_dev
  - build_beta
  - test_beta
  - build_release
  - publish

build_dev:
  stage: build_dev
  script:
    - ohpm install
    - hvigorw assembleApp --product=dev --mode=DEBUG
  artifacts:
    paths:
      - entry/build/outputs/app-dev-debug/

test_dev:
  stage: test_dev
  dependencies:
    - build_dev
  script:
    - hvigorw testApp --coverage
  allow_failure: true

build_beta:
  stage: build_beta
  script:
    - ohpm install
    - hvigorw assembleApp --product=beta --mode=DEBUG
  artifacts:
    paths:
      - entry/build/outputs/app-beta-debug/

build_release:
  stage: build_release
  script:
    - ohpm install
    - hvigorw assembleApp --product=release --mode=RELEASE
  artifacts:
    paths:
      - entry/build/outputs/app-release/
  only:
    - tags

publish:
  stage: publish
  script:
    - echo "Publishing to AppGallery..."
    # AGC CLI publish command
  only:
    - tags

6. 自动化测试集成

6.1 Hypium 集成到 CI

bash
#!/bin/bash
# ci/test.sh

set -e

echo "=== Running Unit Tests ==="
hvigorw testApp --suite=unit_test

echo "=== Generating Coverage ==="
hvigorw testApp --coverage

echo "=== Checking Coverage Threshold ==="
coverage=$(cat coverage/summary.json | jq '.coverage')
if [ $(echo "$coverage < 80" | bc) -eq 1 ]; then
  echo "Coverage below threshold: ${coverage}% (threshold: 80%)"
  exit 1
fi

echo "=== All tests passed ==="

6.2 E2E 测试集成

bash
#!/bin/bash
# ci/e2e.sh

echo "=== Starting E2E Tests ==="

# 使用云测平台(如华为云 AppGallery Cloud Test)
agc cloud:execute-test \
  --package entry/build/outputs/app-debug/app-debug.app \
  --devices "phone-1:30,phone-2:30,tablet-1:30" \
  --test-suite e2e_test_suite \
  --report-path ./e2e-report

echo "E2E Tests complete. Report: ./e2e-report"

7. 面试高频考点

Q1: HarmonyOS 的 CI/CD 工具体系?

回答要点

  • hvigorw 本地构建引擎
  • AppGallery Connect (AGC) 云端 CI/CD
  • Hypium 自动化测试
  • GitHub Actions / GitLab CI 可集成外部 CI

Q2: AGC 云端构建流程?

回答要点

  • 代码拉取 → 依赖安装 → 编译 → 签名 → 测试 → 发布
  • AGC 内置签名服务,不需要手动配置证书
  • 支持多设备云测
  • 构建产物自动上传到 AGC

Q3: 如何在 CI 中处理签名?

回答要点

  • 本地构建:手动配置 signingConfig(p12/cer 文件)
  • AGC 构建:使用 AGC 签名服务(自动管理证书)
  • CI/CD 中通过环境变量传递签名文件
  • 生产环境证书严格保密,只在 AGC 中配置

8. Android 对比

概念AndroidHarmonyOS
CI 工具Jenkins / GitHub ActionsAGC / GitHub Actions
构建命令./gradlew assembleReleasehvigorw assembleRelease
测试框架JUnit / EspressoHypium
云端构建Firebase Test Lab / AGCAppGallery Connect
签名JKS / BKS.p12 / .cer
产物格式APK / AAB.app