Jenkins 鸿蒙元服务打包脚本
·
参考文档:文档中心
前置准备:
jdk17:Java Archive Downloads - Java SE 17
command-line-tools:下载中心 | 华为开发者联盟-HarmonyOS开发者官网,共建鸿蒙生态


设置运行时参数


下面是管道脚本
pipeline {
agent any
environment {
product = "${productName}"
buildName = "${buildMode}"
}
stages {
stage('clear code') {
steps {
//每次git拉取代码前先清楚工作目录下文件
sh 'rm -rf /home/data/.jenkins/workspace/project/*'
}
}
stage('pull code') {
steps {
//git 拉取代码 ${branches} 上面配置的参数 分支
git branch: '${branches}', url: 'git@*************.git'
}
}
stage('Build') {
steps {
sh '''#!/bin/bash
set -ex
JAVA_HOME=/home/data/tool/jdk-17 #指定JDK的安装目录
COMMANDLINE_TOOL_DIR=/home/data/tool #命令行工具的安装目录
# 初始化相关路径
PROJECT_PATH=/home/data/.jenkins/workspace/project # 工程目录 (可以使用运行时变量)
#配置hvigor、ohpm环境变量
export PATH=$COMMANDLINE_TOOL_DIR/command-line-tools/bin:$PATH
#下载并配置JDK
function init_JDK(){
export JAVA_HOME=${JAVA_HOME}
export PATH=$JAVA_HOME/bin:$PATH
java -version
}
#配置hdc环境变量
function init_hdc(){
export HDC_HOME=${COMMANDLINE_TOOL_DIR}/command-line-tools/sdk/default/openharmony/toolchains #设置hdc工具的环境变量,hdc工具在toolchains所在路径下
export PATH=$HDC_HOME:$PATH
}
# 安装ohpm, 若镜像中已存在ohpm,则无需重新安装
function init_ohpm(){
ohpm -v
# 配置ohpm仓库地址
ohpm config set registry https://ohpm.openharmony.cn/ohpm/
}
# 进入package目录安装依赖
function ohpm_install(){
cd $1
ohpm install
}
# 环境适配
function buildHAP(){
# 根据业务情况安装ohpm三方库依赖
ohpm_install "${PROJECT_PATH}"
# ohpm_install "${PROJECT_PATH}/entry"
# ohpm_install "${PROJECT_PATH}/xxx"
# 根据业务情况,采用对应的构建命令,可以参考IDE构建日志中的命令
cd ${PROJECT_PATH}
hvigorw clean --no-daemon
# hvigorw assembleHap --mode module -p product=default -p debuggable=false --no-daemon # 流水线构建命令建议末尾加上--no-daemon
hvigorw assembleHap --mode module -p product=${product} -p buildMode=${buildName} --no-daemon
hvigorw assembleHsp --mode module -p product=${product} -p buildMode=${buildName} --no-daemon
# 判断 buildName 是否为 release
if [[ "$buildName" == "release" ]]; then
# 当 buildName 为 release 时,执行 hvigorw assembleApp 命令
hvigorw assembleApp --mode project -p product="${product}" -p buildMode="${buildName}" --no-daemon
else
# 其他情况下可以执行不同的操作
echo "buildName 不是 release,不执行 assembleApp 命令。"
fi
}
function install_hap(){
hdc file send "${PROJECT_PATH}/entry/build/default/outputs/default/entry-default-signed.hap" "data/local/tmp/entry-default-signed.hap"
hdc shell bm install -p "data/local/tmp/entry-default-signed.hap"
hdc shell rm -rf "data/local/tmp/entry-default-signed.hap"
hdc shell aa start -a MainAbility -b com.example.myapplication -m entry
}
# 使用ohpm发布har
function upload_har(){
ohpm publish pkg.har
}
# 拷贝对应包到指定目录
function gather_bag(){
# 源目录列表
source_dirs=("/home/data/.jenkins/workspace/project")
# 目标目录
destination="/home/data/.jenkins/workspace/project/buildPackage"
# 文件后缀名
extensions=("hap" "hsp" "app")
# 创建目标目录(如果不存在)
mkdir -p "${destination}"
# 遍历源目录和后缀名
for dir in "${source_dirs[@]}"; do
for ext in "${extensions[@]}"; do
find "$dir" -type d \\( -path "$dir/_hap" -o -path "$dir/_app" \\) -prune -o -type f -name "*.$ext" -exec cp {} "${destination}" \\;
done
done
echo "拷贝完成,已将指定后缀名的文件拷贝到 $destination"
}
function main(){
local startTime=$(date \'+%s\')
init_JDK
init_hdc
init_ohpm
buildHAP
# install_hap
# upload_har
gather_bag
local endTime=$(date \'+%s\')
local elapsedTime=$(expr $endTime - $startTime)
echo "build success in ${elapsedTime}s..."
}
main'''
}
}
stage('Download Link') {
steps {
script {
//这是配置下载包路径
currentBuild.description = "<a href='${env.JENKINS_URL}job/${env.JOB_NAME}/${env.BUILD_NUMBER}/execution/node/3/ws/buildPackage/./*zip*/buildPackage.zip'>点击下载 </a>"
}
}
}
}
}
更多推荐


所有评论(0)