系列工程化收官篇·第38篇。测试篇后有技术负责人问“团队有5个人一起开发这个电商Demo代码老冲突测试靠吼怎么做到每天都能自动打包、自动跑测试、自动上架内测” 这正是DevOps要解决的问题。今天我们将电商Demo接入华为云DevCloud搭建一套完整的CI/CD流水线代码提交即触发自动构建、自动测试、自动签名、自动上架AGC内测。我们将解决多分支管理、流水线编排、AGC API鉴权三大工程化难题。全程基于API23含官方文档未涉及的“流水线YAML配置模板”和“自动化上架脚本”。一、前言为什么DevOps是团队开发的“高速公路”在单人开发阶段hdc std install就能搞定一切。但在团队开发中如果没有DevOps你会遇到“在我机器上是好的”开发环境不一致导致各种诡异Bug。集成地狱到了发版日大家才合并代码冲突解决到凌晨。手工操作失误手动打包时选错了签名证书导致上架被拒。反馈滞后测试人员拿到包时已经是三天前写的代码了。DevOps的核心是自动化和持续反馈。它通过工具链将开发、测试、部署流程串联起来实现持续集成CI代码一提交自动合并、构建、跑测试。持续交付CD测试通过后自动生成可供发布的包。持续部署CD自动将包部署到测试环境或应用市场。华为云DevCloud为鸿蒙应用提供了全套的DevOps工具链与AGCAppGallery Connect深度集成是实现鸿蒙应用自动化的首选。二、核心概念辨析CI/CD流程一条标准的鸿蒙应用CI/CD流水线包含以下步骤阶段英文作用关键产出代码拉取​Checkout从代码仓库如CodeArts拉取最新代码干净的代码目录环境准备​Prepare Env安装DevEco Studio、Node.js、配置SDK可用的构建环境代码构建​Build执行hvigor assembleApp编译HAP/APP未签名的HAP/APP包自动化测试​Test运行之前编写的单元测试、UI测试测试报告、覆盖率报告签名打包​Sign Package使用发布证书对APP进行签名签好名的APP包.app自动化上架​Release调用AGC API上传APP包并提交内测内测邀请链接三、代码实现从“手动操作”到“流水线驱动”3.1 环境准备DevCloud项目配置登录华为云控制台进入DevCloud。创建项目选择“鸿蒙应用”模板。关联代码仓库如CodeArts Repo或GitHub。创建构建任务选择“空白构建模板”。3.2 流水线核心cloudbuild.yaml这是流水线的灵魂。在项目根目录创建cloudbuild.yaml文件定义流水线步骤。version: 2.0 params: # 定义流水线参数可在DevCloud界面上修改 - name: APP_NAME value: HarmonyShop - name: BUILD_TYPE value: release # debug或release - name: AGC_API_KEY value: ${AGC_API_KEY} # 从DevCloud密钥管理服务获取 - name: SIGN_CERT_PATH value: /opt/certs/release.p12 steps: # 步骤1拉取代码 - name: checkout kind: git params: url: https://codearts.repo.com/your-group/harmony-shop.git branch: ${BRANCH_NAME} # 动态获取分支名 # 步骤2准备构建环境 - name: prepare_env kind: shell params: command: | echo 准备构建环境 # 安装Node.js依赖 npm install # 验证DevEco环境 hvigor -v # 清理旧构建产物 rm -rf entry/build entry_test/build # 步骤3执行代码构建 - name: build_app kind: shell params: command: | echo 开始构建应用 # 使用hvigorw构建APP包 ./hvigorw assembleApp --mode ${BUILD_TYPE} --no-daemon # 验证产物是否存在 ls -lh entry/build/outputs/app/${BUILD_TYPE}/ # 步骤4运行自动化测试 - name: run_tests kind: shell params: command: | echo 运行自动化测试 # 运行单元测试 ./hvigorw test --mode ${BUILD_TYPE} --no-daemon # 运行UI测试需要连接模拟器或真机此处略 # ./hvigorw uiTest --mode ${BUILD_TYPE} --no-daemon allowFailure: true # 允许测试失败不阻断流水线生产环境不建议 # 步骤5签名打包 - name: sign_package kind: shell params: command: | echo 签名应用包 # 使用jarsigner或apksigner对APP进行签名 # 注意实际签名命令需根据鸿蒙官方工具调整 # 此处仅为示例逻辑 java -jar apksigner.jar sign \ --ks ${SIGN_CERT_PATH} \ --ks-pass pass:${KEYSTORE_PASSWORD} \ --key-pass pass:${KEY_PASSWORD} \ --out ${APP_NAME}_signed.app \ entry/build/outputs/app/${BUILD_TYPE}/${APP_NAME}.app echo 签名完成${APP_NAME}_signed.app # 步骤6上传测试报告 - name: upload_reports kind: shell params: command: | echo 上传测试报告 # 将测试报告上传到DevCloud制品库 # 方便后续查看 cp -r entry/build/reports/* /opt/devcloud/artifacts/ # 步骤7自动化上架AGC内测 - name: publish_to_agc kind: shell params: command: | echo 开始自动化上架 # 调用AGC OpenAPI上传APP包 curl -X POST https://connect-api.cloud.huawei.com/api/publish/v2/app-package/upload \ -H Authorization: Bearer ${AGC_API_KEY} \ -F file${APP_NAME}_signed.app \ -F appId${AGC_APP_ID} \ -F releaseType1 # 1表示内测 # 提交内测审核 curl -X POST https://connect-api.cloud.huawei.com/api/publish/v2/app-release/submit \ -H Authorization: Bearer ${AGC_API_KEY} \ -H Content-Type: application/json \ -d { appId: ${AGC_APP_ID}, releaseType: 1, testAccounts: [test1example.com, test2example.com] } echo 上架请求已提交请前往AGC查看内测状态 # 步骤8通知 - name: notify kind: notification params: type: email # 或wechat, sms receivers: [teamexample.com] subject: 【CI/CD】${APP_NAME} 构建成功 content: | 构建版本${BUILD_NUMBER} 分支${BRANCH_NAME} 状态成功 下载链接${ARTIFACT_URL} 内测链接${AGC_BETA_URL}3.3 AGC API鉴权与配置要实现自动化上架需要获取AGC的API Key登录AGC控制台进入“用户与权限” - “API Key管理”。创建API Key下载私钥文件JSON格式。在DevCloud的密钥管理服务中导入该JSON文件命名为AGC_API_KEY。在流水线中通过${AGC_API_KEY}引用。注意API Key具有极高权限务必妥善保管不要硬编码在代码中。3.4 分支管理策略推荐使用Git Flow或GitHub Flowmain/master生产分支仅包含已发布代码。develop开发主干日常开发在此分支。feature/*功能分支从develop拉取开发完成后合并回develop。release/*发布分支从develop拉取用于测试和修复Bug完成后合并回main和develop。hotfix/*热修复分支从main拉取用于紧急修复线上Bug。流水线触发规则Push触发任何代码推送到develop或feature/*分支时触发CI流水线构建测试。Merge Request触发向main分支发起合并请求时触发完整的CD流水线构建测试签名上架内测。定时触发每天凌晨2点触发全量构建和测试确保代码健康。四、踩坑记录官方文档没写的DevOps细节构建环境差异DevCloud的构建环境可能与本地环境不同如Node.js版本、SDK路径。务必在流水线中显式指定环境变量并使用hvigorw clean清理缓存。签名证书管理签名证书.p12和密码不能提交到代码仓库。必须使用DevCloud的密钥管理服务或凭据管理功能在流水线运行时动态注入。AGC API限流AGC OpenAPI有调用频率限制QPS。在流水线中批量上传文件或提交审核时需要添加适当的延时sleep 2避免被限流。测试设备依赖UI测试和分布式测试需要真实的物理设备。DevCloud提供了云测服务可以租用云端设备池。但成本较高建议仅在关键节点如发布前使用日常开发使用模拟器或本地设备。流水线权限确保DevCloud项目的服务账号有足够的权限访问AGC、代码仓库和制品库。权限不足会导致流水线在最后一步失败非常令人沮丧。