ね律こ / uniapp 项目集成 Jenkins 实现自动化部署

Created Mon, 26 Aug 2024 18:18:00 +0800 Modified Mon, 30 Sep 2024 01:42:16 +0000

Jenkins & uniapp の build

基于 HBuilderX 软件提取的打包命令编写的脚本,稳定、可靠,可用于生产环境。

网上大部分此类教程是根据uniapp官网提供的HBuilderX 工程转换为 vue-cli 工程进行的,据了解其有弊端、集成Jenkins稍显啰嗦且我没最终成功过,故出此教程备忘。

1.文件准备

  1. HBuilderX安装目录下的plugins目录下的

    • uniapp-cli
    • compile-node-sass
  2. https://github.com/sass/node-sass/releases

    服务器执行以下命令根据打印的版本号去下载对应的版本

    node -p process.versions | grep modules
    

    解压后重命名为 binding.node,并移动到指定目录

    # 末尾目录名对应版本号,这里以93为例
    mkdir -p ./compile-node-sass/node_modules/node-sass-					china/vendor/linux-x64-93
    mv ./binding.node  ./compile-node-sass/node_modules/node-sass-			china/vendor/linux-x64-93/
    
  3. 将以上三个目录上传至/root/uniapp-compile

2.打包脚本

cd uniapp-cli
PROJECT_PATH=xxx
export UNI_INPUT_DIR=$PROJECT_PATH
export UNI_OUTPUT_DIR=$PROJECT_PATH/unpackage/dist/build/h5
export NODE_ENV=production
node --max-old-space-size=2048 ./bin/uniapp-cli.js

3. Jenkins 流水线脚本

pipeline {
    agent any
    
    tools {nodejs "nodejs"}
    
    environment{
        COMPILE_PATH = "/root/uniapp-compile"
        WEBSITE_DIR = "mojospy.love"
    }
    stages {
        stage("拉代码") {
            steps{
                sh'''
                rm -rf ./*
                '''
                checkout scmGit(branches: [[name: '*/dev']], extensions: [], userRemoteConfigs: [[credentialsId: 'placeholder', url: 'placeholder']])
            }
        }

        stage("打包") {
            steps{
                sh'''
                PROJECT_DIR=`pwd`
                cd $COMPILE_PATH/uniapp-cli
                PROJECT_PATH=$PROJECT_DIR
                export UNI_INPUT_DIR=$PROJECT_PATH
                export UNI_OUTPUT_DIR=$PROJECT_PATH/unpackage/dist/build/h5
                export NODE_ENV=production
                node --max-old-space-size=2048 ./bin/uniapp-cli.js
                '''
            }
        }

        stage("传输"){
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'placeholder', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: "$WEBSITE_DIR", remoteDirectorySDF: false, removePrefix: 'unpackage/dist/build/h5', sourceFiles: 'unpackage/dist/build/h5/**')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
    }
}