Jenkins 搭建鸿蒙打包
1、创建流水线工程
选择 Freestyle project
2、配置模板仓库、凭证
配置仓库地址
创建凭证,凭证选择账号-密码
(能够访问该仓库的个人或管理员 Gitlab 账密)
到这里执行构建,便可以克隆仓库到工作目录
3、安装插件
3.1 Rebuilder
方便打包任务直接 Rebuild
3.2 Build with Parameters
方便构建任务配置参数,进行构建
4、子模块拉取
我喜欢把游戏资源单独放在一个仓库中,以子模块方式依赖
配置 Advanced sub-modules
behaviours
,拉取游戏变体
- clone depth:克隆深度配置 1,减少克隆时间
5、清除工作空间
配置 Clean after checkout
,情况是:不是当前分支的子模块删除(分支切换时发现子模块内容仍然存在,需要删除)
保险起见,确保每次构建干净,删除整个工作空间
6、构建命令
在 Jenkins 构建参数定义一个变量 BuildType
,区分执行不同的命令构建 app 或 hap 包
6.1 错误:Invalid value of ‘DEVECO_SDK_HOME’ in the system environment path
Jenkins 配置环境变量 DEVECO_SDK_HOME
,指向的是 DevEco Studio
安装目录下的 sdk
Jenkins -> Manager Jenkins -> System
6.2 错误:Unsupported modelVersion of Hvigor 5.0.5
使用 where
命令查看所指向的可执行文件目录
where hvigorw
本机正常工程执行,输出的是 DevEco Sdutio 安装目录下的 ../tools/hvigor/bin/hvigorw.bat
Jenkins 打包工作目录所在工程执行错误,输出的是系统环境变量配置的其他路径(这个可能是因为我之前安装其他版本时配置的 cmd-tools
)
解决:
原因是 Hvigorw 所执行版本不一致,删除系统环境变量的配置,使用 DevEco Sdutio 安装目录下的配置
6.3 Error Message: SDK component missing.
解决:
同样的,配置上述提到的环境变量 DEVECO_SDK_HOME
,指向 DevEco Studio 安装目录下的 sdk
如果仍然不生效,配置 Jenkins 环境变量后重启 Jenkins 服务
6.4 找不到工程里面本地依赖的 har 包
在 Jenkins 中新增 Windows batch command
配置,在项目克隆下来之后,执行一次 ohpm install **.har
安装本地依赖
示例:
ohpm install entry/test.har (entry 是项目相对路径)
Tip:如果是在 DevEco 打包时报错找不到模块
注意:这个 plugin 第三方模块是 npm 包,本地依赖是 npm 包转 har 包
npm install plugin@[版本号]
6.5 找不到 ohpm
配置环境变量,执行DevEco studio 安装目录下的 ./tools/ohpm/bin
7、重置工作空间
- 关闭 Jenkins 服务
- 在 Jenkins 安装目录修改 jenkins.xml,指定
JENKINS_HOME
为新目录 - 复制原先 Jenkins 工作目录所有内容到新目录(否则需要重新配置 Jenkins)
- 重启 Jenkins 服务
重启 Jenkins 服务
按 Win + R,输入 services.msc,然后按回车。在服务列表中,找到名为 Jenkins 的服务右键重启
查看是否已修改成功
Jenkins -> Manager Jenkins -> System
8、产物归档
Jenkins 配置 Archive the artifacts
,只需要配置项目的相对路径
示例:
entry/build/default/outputs/default/entry-default-signed.hap,build/outputs/default/HarmonyH5Mb2-default-signed.app
当然有时候 hap、app 产物名称可能跟对项目不同而变化,你可以通过编写鸿蒙插件对产物进行重命名
(鸿蒙插件类似 Android 的 gradle 插件,参与打包构建过程)
当然,产物支持通配符配置
entry/build/default/outputs/default/.hap,build/outputs/default/.app
9、进程占用解锁
特别是 window 环境下,并发构建容易触发进程占用工作目录下的某个文件,导致清空工作目录时无法删除文件,触发报错不能正常打包
这时候你可能需要在打包前或打包结束后对工作目录或频繁出现占用的文件进行解锁,你可以使用解锁工具 Lockhunter,支持命令行调用
其他
输出环境变量
echo %JENKINS_HOME%
查看命令路径
where hdc
Jenkins 小坑
有时候你想把一段代码放到一个Execute Windows batch command
中执行,你可能会遇到前几行代码执行了,在某行代码执行完之后中断了,后面代码未执行(猜想:可能是那样代码执行完返回了退出)
解决:
Execute Windows batch command 支持配置多个,你可以把中断执行后的代码配置到一个新建的 Execute Windows batch command