使用Jenkins实现鸿蒙HAR应用的自动化构建打包

使用Jenkins实现鸿蒙HAR应用的自动化构建打包

在软件开发领域,自动化构建是提高开发效率和确保代码质量的重要手段。特别是在鸿蒙(OpenHarmony)应用开发中,自动化构建更是不可或缺。本文将详细介绍如何使用Jenkins命令行工具实现鸿蒙HAR应用的自动化构建打包,让开发流程更加高效、可靠。

一、引言

随着鸿蒙系统的广泛应用,越来越多的开发者投入到鸿蒙应用的开发中。然而,手动构建和打包应用不仅耗时耗力,还容易出错。因此,实现自动化构建成为开发者的迫切需求。Jenkins作为一款开源的自动化服务器软件,以其强大的功能和灵活的插件体系,成为实现这一需求的理想选择。

二、环境准备

在开始之前,请确保你已经安装了以下软件和环境:

  • Jenkins:用于自动化构建的任务调度和执行。
  • DevEco Studio:鸿蒙开发的集成开发环境(IDE),包含了必要的工具和SDK。
  • Node.js:JavaScript运行环境,用于执行hvigorw等脚本。
三、核心步骤

实现鸿蒙HAR应用的自动化构建打包,核心在于以下三个步骤:初始化依赖、初始化工作环境、执行具体的构建任务。下面将详细介绍每个步骤的具体实现。

1. 初始化依赖

首先,需要使用ohpm命令来初始化项目所需的依赖。ohpm是鸿蒙的包管理工具,类似于npm或yarn。在Jenkins脚本中,可以使用以下命令来安装所有依赖:

/Applications/DevEco-Studio.app/Contents/tools/ohpm/bin/ohpm install --all --registry https://ohpm.openharmony.cn/ohpm/ --strict_ssl true

这条命令会从指定的ohpm仓库(https://ohpm.openharmony.cn/ohpm/)下载并安装所有在oh-package.json5中声明的依赖。

2. 初始化工作环境

接下来,使用hvigorw脚本来初始化工作环境。hvigorw是鸿蒙的构建工具,用于执行构建、编译等任务。在Jenkins脚本中,可以使用以下命令来同步项目配置并初始化工作环境:

/Applications/DevEco-Studio.app/Contents/tools/node/bin/node /Applications/DevEco-Studio.app/Contents/tools/hvigor/bin/hvigorw.js --sync -p product=default --analyze=normal --parallel --incremental --daemon

这条命令会同步项目的配置信息,并根据指定的产品配置(product=default)初始化工作环境。同时,它还会开启并行构建、增量构建和守护进程等功能,以提高构建效率。

3. 执行具体的构建任务

最后,使用hvigorw脚本来执行具体的构建任务。在Jenkins脚本中,可以使用以下命令来构建并打包HAR应用:

hvigorw --mode module -p product=default -p module=$moduleName@default -p buildMode=release assembleHar --analyze=normal --parallel --incremental --daemon

这条命令会根据指定的模块(module=$moduleName@default)和产品配置(product=default),以发布模式(buildMode=release)构建并打包HAR应用。同样地,它也开启了并行构建、增量构建和守护进程等功能。

四、脚本实现

将上述三个步骤整合到一个脚本中,就可以在Jenkins中执行完整的业务逻辑构建了。以下是一个示例脚本:

#!/bin/bash# 设置DevEco Studio路径
DEVECO_STUDIO_PATH="/Applications/DevEco-Studio.app/Contents/tools"# 初始化依赖
${DEVECO_STUDIO_PATH}/ohpm/bin/ohpm install --all --registry https://ohpm.openharmony.cn/ohpm/ --strict_ssl true# 检查依赖安装是否成功
if [ $? -ne 0 ]; thenecho "依赖安装失败"exit 1
fi# 初始化工作环境
${DEVECO_STUDIO_PATH}/node/bin/node ${DEVECO_STUDIO_PATH}/hvigor/bin/hvigorw.js --sync -p product=default --analyze=normal --parallel --incremental --daemon# 检查工作环境初始化是否成功
if [ $? -ne 0 ]; thenecho "工作环境初始化失败"exit 1
fi# 执行具体的构建任务
hvigorw --mode module -p product=default -p module=$moduleName@default -p buildMode=release assembleHar --analyze=normal --parallel --incremental --daemon# 检查构建任务是否成功
if [ $? -ne 0 ]; thenecho "构建任务失败"exit 1
fiecho "构建成功"

将这个脚本保存为build.sh,并在Jenkins中配置一个执行该脚本的构建任务,就可以实现鸿蒙HAR应用的自动化构建打包了。

五、总结与展望

通过本文的介绍,我们了解了如何使用Jenkins命令行工具实现鸿蒙HAR应用的自动化构建打包。这不仅提高了开发效率,还确保了代码质量。未来,随着鸿蒙系统的不断发展和完善,自动化构建工具也将更加智能和高效。我们可以期待更多的自动化工具和插件出现,为鸿蒙应用开发提供更加便捷和高效的解决方案。

希望本文对大家有所帮助!如果你有任何疑问或建议,请随时在评论区留言。

附录一

在DevEco Studio启动或项目初始化过程中,执行以下命令:

/Applications/DevEco-Studio.app/Contents/tools/ohpm/bin/ohpm install --all --registry https://ohpm.openharmony.cn/ohpm/ --strict_ssl true

作用是为鸿蒙(HarmonyOS/OpenHarmony)项目安装或更新所有依赖包。以下是具体解析:


1. 命令的组成部分

参数/路径说明
/Applications/DevEco-Studio.app/.../ohpm调用DevEco Studio内置的 ohpm(OpenHarmony Package Manager)工具,专用于管理鸿蒙生态的依赖包。
install --all安装项目配置文件(如oh-package.json5)中定义的所有依赖项(包括dependenciesdevDependencies)。
--registry https://ohpm.openharmony.cn/ohpm/指定鸿蒙官方包仓库作为依赖源,确保下载合法的鸿蒙组件。
--strict_ssl true启用严格的SSL证书验证,防止网络劫持或下载来源被篡改。

2. 该命令的典型场景

(1) 初始化项目时
  • 当首次打开项目或检测到oh_modules(依赖目录)缺失时,DevEco Studio会自动触发此命令,确保依赖完整。
  • 类似npm installyarn install的作用,但针对鸿蒙生态的包管理。
(2) 更新依赖配置后
  • 如果修改了oh-package.json5文件(如添加/删除依赖项),手动执行此命令可同步依赖。
(3) 解决依赖冲突或缺失
  • 当编译失败并提示缺少模块或版本不兼容时,重新运行此命令可尝试修复依赖树。

3. 关键注意事项

(1) 依赖源的合法性
  • 必须使用鸿蒙官方仓库(https://ohpm.openharmony.cn/ohpm/)以确保依赖包与鸿蒙系统兼容。
  • 不要随意切换第三方仓库,否则可能引入非鸿蒙适配的代码,导致编译失败。
(2) --strict_ssl true的作用
  • 若本地网络有SSL证书拦截(如公司代理),可能需要临时关闭此参数(设为false),但会降低安全性。
  • 推荐优先配置系统信任的证书,而非禁用SSL验证。
(3) 与npm的区别
  • ohpm是鸿蒙专用的包管理器,与Node.js的npm无直接关系。
  • 鸿蒙的Native模块(如C++库)和HAR/HSP包必须通过ohpm管理,无法使用npm替代。

4. 常见问题

Q1: 能否省略此命令?
  • 。除非项目无任何依赖项,否则缺少依赖会导致编译失败(如ERROR: ENOENT: no such file)。
Q2: 执行失败怎么办?
  • 步骤1:检查网络
    确保能访问https://ohpm.openharmony.cn,尤其注意代理或防火墙设置。
  • 步骤2:清理缓存
    rm -rf ./oh_modules  # 删除依赖目录
    ohpm clean           # 清理ohpm缓存
    
  • 步骤3:手动指定环境
    若系统全局安装了其他Node.js版本,可能路径冲突,应直接使用DevEco Studio内置的ohpm和Node.js。

5. 总结

此命令是鸿蒙项目依赖管理的核心步骤,确保所有模块和工具链正确安装。
如果编译过程中出现依赖相关错误(如uv_cwdENOENT),优先尝试重新执行此命令并检查网络环境。

附录二

在鸿蒙(HarmonyOS/OpenHarmony)应用开发中,您提到的命令是用于调用 DevEco Studio 内置的 hvigor 工具来执行项目构建任务。以下是该命令的详细解析:


命令结构

/Applications/DevEco-Studio.app/Contents/tools/node/bin/node 
/Applications/DevEco-Studio.app/Contents/tools/hvigor/bin/hvigorw.js 
--sync 
-p product=default 
--analyze=normal 
--parallel 
--incremental 
--daemon

各部分作用

1. nodehvigorw.js 路径
  • /Applications/DevEco-Studio.app/.../node
    使用 DevEco Studio 内置的 Node.js 环境,避免因系统全局 Node.js 版本不兼容导致问题。
  • /Applications/DevEco-Studio.app/.../hvigorw.js
    hvigor 是华为为鸿蒙开发定制的构建工具(类似 Android 的 Gradle),负责管理依赖、编译代码、打包资源等任务。

2. 核心参数解析
参数作用
--sync同步项目配置,确保所有模块的依赖关系和配置(如 build-profile.json5)一致。常用于首次拉取代码或修改依赖后。
-p product=default指定构建的 产品形态default 表示使用默认配置(如调试模式),其他可能值如 release(发布模式)。
--analyze=normal启用构建过程分析,但仅输出常规日志(非详细)。若需调试,可改为 --analyze=verbose
--parallel启用多线程并行构建,加快大型项目的编译速度。
--incremental增量编译模式,仅编译修改过的文件,减少构建时间。但若缓存异常可能导致失败,需定期清理(如 hvigor clean)。
--daemon以守护进程模式运行 hvigor,首次启动稍慢,但后续构建会复用进程提升速度。

该命令的典型场景

1. 项目初始化或配置变更后
  • 首次拉取代码或修改 build-profile.json5oh-package.json5 等文件后,需执行 --sync 确保配置同步。
2. 日常开发构建
  • 使用 --incremental--parallel 加速构建,适合频繁修改代码的场景。
3. 调试构建问题
  • 若构建失败,移除 --incremental--daemon 进行全量编译,或添加 --debug 参数获取详细日志。

常见问题与注意事项

1. 增量编译失败
  • 现象:修改代码后构建报错,但全量编译成功。
  • 解决:清理缓存重新同步:
    /Applications/DevEco-Studio.app/.../hvigorw.js clean
    
2. 守护进程(daemon)冲突
  • 现象:修改环境变量或工具链后,构建行为异常。
  • 解决:终止守护进程:
    /Applications/DevEco-Studio.app/.../hvigorw.js --stop
    
3. 并行编译(parallel)的资源竞争
  • 现象:多模块同时编译时,偶发文件锁冲突(如 ENOENTEACCES)。
  • 解决:降低并行线程数(默认根据 CPU 核心数自动分配):
    --parallel --max-workers=2  # 限制为 2 个线程
    

与 DevEco Studio 图形化操作的关系

  • GUI 操作等价性:在 DevEco Studio 中点击 Build > Build Project 时,IDE 底层会生成类似命令,但可能省略部分参数(如默认启用 --daemon)。
  • 手动调用的优势:在自动化脚本或调试复杂问题时,手动指定参数更灵活。

总结

此命令是鸿蒙项目构建的核心步骤,通过 hvigor 工具实现:

  1. 同步配置--sync
  2. 按产品形态构建-p product=default
  3. 优化构建速度--parallel--incremental--daemon

若构建不稳定,可尝试以下操作:
4. 清理缓存:hvigor clean
5. 关闭增量编译:移除 --incremental
6. 查看详细日志:添加 --debug 参数。

附录三 .鸿蒙构建-Error: ENOENT: no such file or directory, uv_cwd

工程在进行构建的时候遇到这个问题:Error: ENOENT: no such file or directory, uv_cwd

详细报错其实是在 node 里面,因此在网络上主要有以下几种解决方式

  1. 如果是在终端运行的话,可以重启终端,看是否解决

  2. 暴力终止所有 node 进程:killall node (本人用此方法解决问题)

  3. 重启电脑。还真别说,我觉得靠谱。跟上一种方法有异曲同工之妙。但如果你不想每次都重启,可能还是优先看看上面的方法吧

上面参考了其他博主的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/895029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漏洞分析 Spring Framework路径遍历漏洞(CVE-2024-38816)

漏洞概述 VMware Spring Framework是美国威睿(VMware)公司的一套开源的Java、JavaEE应用程序框架。该框架可帮助开发人员构建高质量的应用。 近期,监测到Spring Framework在特定条件下,存在目录遍历漏洞(网宿评分&am…

笔记:理解借贷相等的公式

强烈推荐非会计人士,快速了解会计看这个系列的视频,其中比较烧脑的“借贷相等”公式,这个视频讲解的不错: 4.小白财务入门-借贷记账法_哔哩哔哩_bilibili 比如这里,钱在银行卡重,所以银行存款就是借方…

【Spring】什么是Spring?

什么是Spring? Spring是一个开源的轻量级框架,是为了简化企业级开发而设计的。我们通常讲的Spring一般指的是Spring Framework。Spring的核心是控制反转(IoC-Inversion of Control)和面向切面编程(AOP-Aspect-Oriented Programming)。这些功能使得开发者…

学习笔记:机器学习中的数学原理(一)

1. 集合 集合分为有限集和无限集; 对于有限集,两集合元素数相等即为等势; 对于无限集,两集合元素存在一一映射关系即为等势; 无限集根据是否与正整数集等势分为可数集和不可数集。 2. sigmoid函数(也叫…

【信息系统项目管理师-案例真题】2016下半年案例分析答案和详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题一【问题1】4 分【问题2】12 分【问题3】3 分【问题4】6 分试题二【问题1】3 分【问题2】4 分【问题3】8 分【问题4】5 分【问题5】5 分试题三【问题1】4 分【问题2】8 分【问题3】5 分【问题4】8 分试题一…

基于javaweb的SpringBoothis智能医院管理系统(源码+文档+部署讲解)

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 运行环境开发工具适用功能说明一、项目运行 环境配置: 运行环境 Java≥8、MySQL≥5.7、Node.js≥14 开发工具 后端&…

JS实现灯光闪烁效果

在 JS中&#xff0c;我们可以实现灯光闪烁效果&#xff0c;这里主要用 setInterval 和 clearInterval 两个重要方法。 效果图 源代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>灯闪烁效果<…

7.PPT:“中国梦”学习实践活动【20】

目录 NO1234​ NO5678​ NO9\10\11 NO1234 考生文件夹下创建一个名为“PPT.pptx”的新演示文稿Word素材文档的文字&#xff1a;复制/挪动→“PPT.pptx”的新演示文稿&#xff08;蓝色、黑色、红色&#xff09; 视图→幻灯片母版→重命名&#xff1a;“中国梦母版1”→背景样…

学习笔记十九:K8S生成pod过程

K8S生成pod过程 流程图具体生成过程用户提交 Pod 定义API Server 处理请求调度器分配节点&#xff08;Scheduling&#xff09;目标节点上的 Pod 创建网络配置状态上报与监控控制器管理&#xff08;Controller Manager&#xff09;就绪与服务发现 关键错误场景高级特性 流程图 具…

封装descriptions组件,描述,灵活

效果 1、组件1&#xff0c;dade-descriptions.vue <template><table><tbody><slot></slot></tbody> </table> </template><script> </script><style scoped>table {width: 100%;border-collapse: coll…

21.2.6 字体和边框

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 通过设置Rang.Font对象的几个成员就可以修改字体&#xff0c;设置Range.Borders就可以修改边框样式。 【例 21.6】【项目&#xff…

360手机刷机 360手机解Bootloader 360手机ROOT

360手机刷机 360手机解Bootloader 360手机ROOT 问&#xff1a;360手机已停产&#xff0c;现在和以后&#xff0c;能刷机吗&#xff1f; 答&#xff1a;360手机&#xff0c;是肯定能刷机的 360手机资源下载网站 360手机-360手机刷机RootTwrp 360os.top 360rom.github.io 一、…

链表专题-02

链表专题 /*** 链表的节点* param <E>*/ public class ListNode<E> {public E element;public ListNode<E> next;public ListNode() {}public ListNode(E element) {this.element element;}public ListNode(E element, ListNode<E> next) {this.eleme…

外部中断实验 #STM32F407

外部中断实验 此实验将外部中断配置为按键输入&#xff0c;通过按键输入触发外部中断&#xff0c;在外部中断里面实施相应的处理&#xff0c;具体功能&#xff1a; 按下KEY0&#xff0c;翻转LED0状态按下KEY1&#xff0c;翻转LED1状态按下KEY2&#xff0c;同时翻转LED0和LED1…

机器学习8-卷积和卷积核1

机器学习8-卷积和卷积核1 卷积与图像去噪卷积的定义与性质定义性质卷积的原理卷积步骤卷积的示例与应用卷积的优缺点优点缺点 总结 高斯卷积核卷积核尺寸的设置依据任务类型考虑数据特性实验与调优 高斯函数标准差的设置依据平滑需求结合卷积核尺寸实际应用场景 总结 图像噪声与…

SVN 提交与原有文件类型不一样的文件时的操作

SVN 提交与原有文件类型不一样的文件时的操作 背景 SVN 服务器上原本的文件是软链接类型的&#xff0c;但是我将它改成普通文件再上传。出现了以下提示&#xff1a; 解决过程 本来想着通过 svn rm 和 svn add 来解决&#xff0c;但是行不通。 最终解决方案 svn rm --keep-…

阿里云专有云网络架构学习

阿里云专有云网络架构 叶脊&#xff08;spine-leaf&#xff09;网络和传统三层网络拓扑对比 阿里云网络架构V3拓扑角色介绍推荐设备设备组网举例带外管理网络带外网和带内网对比设备介绍 安全网络设备介绍 参考 后续更新流量分析叶脊&#xff08;spine-leaf&#xff09;网络和传…

Deepseek本地部署指南:在linux服务器部署,在mac远程web-ui访问

1. 在Linux服务器上部署DeepSeek模型 要在 Linux 上通过 Ollama 安装和使用模型&#xff0c;您可以按照以下步骤进行操作&#xff1a; 步骤 1&#xff1a;安装 Ollama 安装 Ollama&#xff1a; 使用以下命令安装 Ollama&#xff1a; curl -sSfL https://ollama.com/download.…

3D数字化营销:重塑家居电商新生态

随着电商的蓬勃发展&#xff0c;网上订购家具已成为众多消费者的首选。然而&#xff0c;线上选购家具的诸多挑战&#xff0c;如风格不匹配、尺寸不合适、定制效果不如预期以及退换货不便等&#xff0c;一直困扰着消费者。为解决这些问题&#xff0c;家居行业急需一种全新的展示…

重塑“景区+商业”模式,打造特色文旅新体验

重塑“景区商业”模式&#xff0c;打造特色文旅新体验 近年来&#xff0c;旅游业蓬勃发展&#xff0c;旅游热潮不断升温&#xff0c;游客消费观念也随之升级。为顺应这一趋势&#xff0c;各大景区纷纷探索打造特色文旅项目&#xff0c;以期吸引更多游客。然而&#xff0c;“景…