参考文档:文档中心

前置准备:

        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>"
                }
            }
        }
    }
}

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐