HarmonyOS 6.1 CI/CD流水线实战:从DevEco到AGC的自动化发布
系列工程化终章。上篇讲完单元测试有读者问“每次测试完还要手动打包、上传AGC、填应用信息太繁琐了有没有办法一键发布” 这正是CI/CD持续集成/持续部署要解决的核心痛点。作为系列的最后一篇工程化内容本文将把电商Demo的发布流程彻底自动化从代码提交到Git到自动运行测试、构建HAP包、上传到AGCAppGallery Connect、甚至自动分发到测试人员手中。全程基于华为云DevCloud无需自建服务器30分钟即可搭建一套企业级发布流水线。所有配置均适配API23含官方文档未提及的权限陷阱与签名方案。一、前言为什么CI/CD是专业开发的“分水岭”在之前的19篇文章里我们实现了用State/Link构建UI用分布式流转实现跨端体验用端云一体化处理业务逻辑用单元测试保障代码质量。但所有这些成果最终都要通过“发布”到达用户手中。传统的手动发布流程是这样的写完代码本地跑测试打开DevEco Studio点Build HAP打开浏览器登录AGC上传HAP包填写版本信息、更新说明提交审核等待……这个过程不仅枯燥而且极易出错比如上传了旧版本的包、忘记了版本号的递增、或者签名证书用错了。在团队开发中这种“手工发布”更是灾难每个人发布的包可能都不一致。CI/CD的核心价值就是标准化与自动化持续集成CI代码一提交自动跑测试、构建包快速反馈质量问题。持续部署CD测试通过后自动上传到AGC甚至自动开启灰度发布。对于鸿蒙生态来说CI/CD还有一个特殊意义多端统一构建。我们的电商Demo用ArkUI-X支持Android/iOSCI/CD可以一键同时构建鸿蒙、安卓、iOS三个平台的包确保版本一致性。二、核心概念辨析CI/CD工具链很多新手会被Jenkins、GitLab CI、GitHub Actions等名词吓到。其实在鸿蒙生态里工具链非常清晰工具/服务角色定位适用场景DevEco Studio​本地开发IDE写代码、本地调试、手动构建Git​代码版本管理代码提交、分支管理本地或托管平台华为云DevCloud​云端CI/CD引擎自动化构建、测试、部署推荐与AGC无缝集成AppGallery Connect (AGC)​应用分发平台存储HAP包、审核、上架应用市场Command Line Tools​命令行构建工具在无界面的服务器如DevCloud上构建HAP包核心认知我们将使用Git托管代码华为云DevCloud作为CI/CD引擎AGC作为发布终点。DevEco Studio只是我们写代码的工具构建和发布都交给云端自动完成。三、代码实现搭建自动化流水线3.1 准备工作代码托管将之前的电商Demo代码上传到码云Gitee或华为云CodeHub推荐与DevCloud集成更顺畅。AGC配置在AGC上创建好应用Package Name要与代码一致。生成API Key进入AGC“用户与访问-密钥管理”创建一个API Key下载credentials.json文件。这是CI/CD上传包到AGC的凭证必须保密准备好签名证书在DevEco Studio中生成.p12、.cer、.p7b文件并备份好密码。华为云DevCloud登录华为云控制台进入“软件开发生产线 DevCloud”。创建项目关联你的代码仓库。3.2 编写构建脚本hvigorfile.jsDevEco Studio使用hvigor作为构建工具类似前端的Webpack。我们需要在项目根目录创建或修改hvigorfile.js使其支持命令行构建。关键点CI/CD环境中没有图形界面无法通过弹窗输入签名密码所以我们使用环境变量传递密码。// 项目根目录/hvigorfile.js const hvigor require(ohos/hvigor); const fs require(fs); // 定义一个名为buildHap的任务 hvigor.task(buildHap) .applyPlugin(ohos/hvigor-plugin-ohos-app) .doFirst(() { console.log(开始构建HAP包...); // 从环境变量读取签名密码CI/CD环境中设置 const storePassword process.env.SIGN_STORE_PASSWORD; const keyPassword process.env.SIGN_KEY_PASSWORD; if (!storePassword || !keyPassword) { throw new Error(签名密码未设置请在CI/CD环境中配置环境变量); } // 动态修改构建配置可选例如修改版本号 const buildProfilePath entry/build-profile.json5; if (fs.existsSync(buildProfilePath)) { let profile fs.readFileSync(buildProfilePath, utf-8); // 示例将版本号改为环境变量中的值 const buildNumber process.env.BUILD_NUMBER || 1; profile profile.replace(/versionCode:\s*\d/, versionCode: ${buildNumber}); fs.writeFileSync(buildProfilePath, profile); console.log(版本号已更新为: ${buildNumber}); } }) .doLast(() { console.log(HAP包构建完成); console.log(输出路径: entry/build/outputs/default/entry-default-signed.hap); }); // 导出任务 module.exports { tasks: [buildHap] };安全提示千万不要把密码硬编码在脚本里一定要使用环境变量。3.3 配置DevCloud流水线进入华为云DevCloud的项目点击“构建发布-流水线”新建流水线。我们分步配置步骤1克隆代码源选择你的代码仓库Gitee/CodeHub。分支选择master或main。步骤2构建HAP包核心步骤构建工具选择“Hvigor构建”。脚本输入构建命令# 设置环境变量在DevCloud的界面上设置不要写在这里 # export SIGN_STORE_PASSWORD你的密码 # export SIGN_KEY_PASSWORD你的密码 # export BUILD_NUMBER${BUILD_NUMBER} # DevCloud内置变量 # 执行构建 node hvigorw.js buildHap --no-daemon制品设置“归档制品”路径填写entry/build/outputs/default/*.hap。这一步是为了把构建好的HAP包保存下来供后续步骤使用。步骤3运行单元测试构建工具选择“命令行”。脚本在构建目录下执行测试命令# 进入测试模块目录 cd entry_test # 执行测试使用Hypium测试框架 npm install # 如果测试依赖需要安装 npx hypium run tests --testRunner OhosTestRunner配置勾选“测试报告解析”路径填写entry_test/build/reports/tests/index.html。这样DevCloud会自动收集测试报告。步骤4上传到AGCCD的关键插件选择“AppGallery Connect上传”。凭证上传你之前下载的credentials.json文件。配置应用ID填写AGC上的App ID。构建产物选择上一步归档的HAP包路径。版本更新说明可以填写Auto-release by CI/CD at ${BUILD_TIME}。分发范围选择“测试人员”先给测试人员没问题再手动点发布。步骤5通知可选插件选择“邮件通知”或“钉钉通知”。配置构建成功/失败后自动发送消息给团队。3.4 触发流水线配置完成后你可以在DevCloud中手动点击“执行”也可以设置自动触发代码提交触发当开发人员git push代码到master分支时自动启动流水线。定时触发每天凌晨2点自动构建一次确保主分支始终是可发布的。四、踩坑记录官方文档没写的7个细节环境变量优先级DevCloud的环境变量会覆盖系统变量但hvigor脚本中如果硬编码了密码会优先使用硬编码的。务必确保脚本中是从process.env读取。签名证书的路径问题CI/CD服务器上没有你的本地证书需要将.p12等证书文件也提交到代码仓库注意.p12包含私钥务必在私有仓库中操作且设置严格的访问权限或者在DevCloud中配置“文件保密存储”构建时动态下载。AGC API的速率限制频繁调用AGC的上传API可能会被限流。建议在流水线中设置合理的重试机制。构建机的环境差异DevCloud的构建机可能预装了不同版本的Node.js或Java。最好在流水线中显式指定hvigor和Node.js的版本避免因版本差异导致构建失败。测试环境的初始化如果单元测试依赖AGC的云数据库需要在测试前通过脚本初始化测试数据并在测试后清理。否则测试会相互干扰。构建产物的清理每次构建都会生成HAP包长期积累会占满磁盘。需要在流水线末尾或定期清理旧的构建产物。权限最小化AGC的API Key权限要最小化只授予“上传应用包”的权限不要授予“删除应用”或“修改财务信息”的权限防止凭证泄露造成损失。

相关新闻

趣谈西门子经济型PLC双雄:S7-200SMART的“草根逆袭”与S7-1200的“名门之争”

趣谈西门子经济型PLC双雄:S7-200SMART的“草根逆袭”与S7-1200的“名门之争”

1. 草根逆袭:S7-200SMART的"中国特供"之路2008年,西门子收购了一家名不见经传的PLC厂商,这个后来被命名为S7-200的产品线最初在德国总部眼里就像个"养子"。当时谁也没想到,这个不被看好的小家伙会在中国市场上…

2026/7/16 7:47:00阅读更多 →
如何搭建和使用AO3镜像站:技术爱好者的完整指南

如何搭建和使用AO3镜像站:技术爱好者的完整指南

如何搭建和使用AO3镜像站:技术爱好者的完整指南 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site AO3镜像站项目是一个开源社区项目,致力于为全球同人创作爱好者提供稳定可靠的Archive of Our Ow…

2026/7/16 7:47:00阅读更多 →
从构建到连接:解决嵌入式系统SSH Root登录的配置陷阱

从构建到连接:解决嵌入式系统SSH Root登录的配置陷阱

1. 嵌入式系统SSH Root登录的典型问题场景最近在给树莓派定制系统时遇到一个典型问题:用Buildroot编译的镜像启动后,明明已经通过make menuconfig添加了OpenSSH支持,但尝试用root账户登录时却反复提示"Permission denied"。这种问题…

2026/7/16 7:41:59阅读更多 →
Unity Addressable资源管理框架:从核心概念到工程实践

Unity Addressable资源管理框架:从核心概念到工程实践

1. 项目概述:为什么我们需要Addressable系统?如果你在Unity项目里做过资源管理,大概率经历过这样的场景:项目初期,所有资源都放在Resources文件夹里,加载用Resources.Load,感觉挺方便。但随着项…

2026/7/17 7:35:36阅读更多 →
惠普游戏本系统安装与优化全指南

惠普游戏本系统安装与优化全指南

1. 惠普暗影精灵与光影精灵系列电脑系统安装前的准备工作在开始安装系统前,我们需要做好充分的准备工作。首先需要明确的是,惠普暗影精灵(OMEN)和光影精灵(VICTUS)系列虽然都是游戏本,但在硬件配…

2026/7/17 7:35:36阅读更多 →
Windows SYSTEM账户权限管理与安全实践

Windows SYSTEM账户权限管理与安全实践

1. SYSTEM账户的本质与权限层级Windows系统中的SYSTEM账户(NT AUTHORITY\SYSTEM)是操作系统内核使用的最高权限账户,其权限级别甚至超过Administrator。这个账户默认不显示在用户管理界面中,也不提供交互式登录功能,主…

2026/7/17 7:35:36阅读更多 →
基于OpenHarmony的多模态智能门锁系统设计与实现

基于OpenHarmony的多模态智能门锁系统设计与实现

1. 项目背景与核心需求智能门锁作为传统机械锁的升级方案,近年来在安全性、便捷性和智能化方面持续演进。当前主流智能门锁普遍采用指纹、密码或NFC等单一认证方式,存在生物特征识别率不稳定、备用开锁方案体验割裂等问题。本项目基于小凌派RK2206开发板…

2026/7/17 7:35:36阅读更多 →
Windows与Linux双系统引导管理实战指南

Windows与Linux双系统引导管理实战指南

1. 双系统引导管理概述在Windows环境下管理双系统启动项是许多开发者和技术爱好者的刚需。当我们在同一台机器上安装Windows和Linux双系统时,通常会遇到启动菜单缺失Linux选项的情况。这并非系统安装失败,而是Windows的引导管理器(Boot Manag…

2026/7/17 7:35:36阅读更多 →
DownKyi项目法律合规性分析:开源视频下载工具的法律边界与用户指南

DownKyi项目法律合规性分析:开源视频下载工具的法律边界与用户指南

DownKyi项目法律合规性分析:开源视频下载工具的法律边界与用户指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去…

2026/7/17 7:30:36阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/16 8:28:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/16 6:53:04阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/16 12:02:41阅读更多 →
VS Code 高效配置与个性化定制全攻略

VS Code 高效配置与个性化定制全攻略

1. VS Code 高效配置基础作为一款轻量级但功能强大的代码编辑器,VS Code 的默认配置已经能满足基本需求,但通过合理调整设置可以大幅提升编码效率。我使用 VS Code 已经有五年多时间,期间尝试过各种配置方案,总结出这套适合大多数…

2026/7/17 0:00:01阅读更多 →
从竞赛代码到桌面工具:让 SuperADD 与 SubspaceAD 真正跑进自己的图像

从竞赛代码到桌面工具:让 SuperADD 与 SubspaceAD 真正跑进自己的图像

在异常检测领域,很多优秀算法最初都是以研究代码的形式发布的。它们能够在固定测试集上复现实验结果,却不一定能被普通用户直接拿来测试自己的图片。尤其是最近很多算法仅提供在固定测试集的测试环境,而gradio的demo演示也不会提供。 对工程应用和在自己的图片上进行测试来…

2026/7/17 0:00:01阅读更多 →
WinRAR高效配置指南:从基础安装到高级压缩实战

WinRAR高效配置指南:从基础安装到高级压缩实战

前几天帮同事处理一个客户发来的压缩包,解压时系统自带的工具弹出一串乱码,换用 WinRAR 却顺利打开了。这种看似简单的场景,恰恰暴露了不同压缩工具在处理非标准编码、分卷压缩或加密文件时的差异。WinRAR 作为一款老牌工具,真正价…

2026/7/17 0:00:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/16 20:13:14阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/16 8:58:42阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/16 17:10:26阅读更多 →