发布时间:2025-06-24 20:03:12  作者:北方职教升学中心  阅读量:903


Pipeline流水线部署

流水线脚本:

pipeline {
    agent  { label '服务器地址' } 
    parameters {
        gitParameter(
            name: 'git_version', 
            type: 'PT_TAG',     // 获取 Git 标签
            defaultValue: 'main',            // 默认主分支,可调整
            branchFilter: '.*',              // 匹配所有 Tag
            selectedValue: 'NONE', 
            sortMode: 'DESCENDING',         // 按时间倒序排列
            description: '请选择需要部署的 Git Tag 版本'
        )
    }
        environment {
        REPO_URL = 'http://内网地址/HuihangFront/ClientHuiHangAdminUniapp.git'  // Git 仓库地址
        CREDENTIALS_ID = 'XXX-1234-1234-1234-XXXXXXXX' // Jenkis中配置的Git凭据ID
        SOLUTION_PATH = "${WORKSPACE}"// Jenkins 工作空间路径
        PROJECT_PATH = "${WORKSPACE}"// 项目路径
        PUBLISH_PATH = "${WORKSPACE}\\unpackage\\dist\\build\\web"// 打包生成路径
        CLI_PATH = "D:\\Client\\hbuilderx\\HBuilderX" // HBuilder CLI 路径
        TARGET_PUBLISH = "D:\\Client\\HuiHangAdminMobileTest"// 发布路径
    }
    options {
        timeout(time: 5, unit: 'MINUTES')    // 为整个 Pipeline 设置5分钟的超时时间
    }
    stages {
        stage('工作目录') {
            steps {
                script {
                      echo "当前工作空间路径: ${SOLUTION_PATH}"
                      echo "CLI路径: ${CLI_PATH}"
                }
            }
        }
        stage('拉取Git代码') {
            steps {
                script {
                    echo "拉取代码 Tag: ${params.git_version}"
                    // 使用 checkout 拉取代码,包含指定的 git tag
                    checkout([$class: 'GitSCM',
                        branches: [[name: "${params.git_version}"]], // 拉取指定的 Tag
                        userRemoteConfigs: [[
                            url: "${REPO_URL}", 
                            gitTool: 'Default',
                            credentialsId: "${CREDENTIALS_ID}"
                        ]]
                    ])
                    echo "拉取成功 tag: ${params.git_version}"
                }
            }
        }

        stage('Clean Old Build') {
            steps {
                script {
                    echo "===== 删除旧的发布文件 ====="
                       if (fileExists(PUBLISH_PATH)){
                           bat """
                             rd /s /q "${PUBLISH_PATH}"
                              echo ${PUBLISH_PATH} Old files have been deleted
                              """
                       }else {
                        echo "旧的发布文件不存在,无需删除。

重要:Jenkins运行hbuilder Cli打包项目

1.Jenkins需要有系统权限(属性-登录-设置系统服务器账号密码)

2.hbuilder需要保持打开状态(cli.exe open加了环境变量 但是在Jenkins中不起作用)

一、默认方式部署

构建步骤Execute Windows batch command:

@echo off
:: 定义变量
set SolutionPath=%WORKSPACE%
set ProjectPath=%WORKSPACE%
set PublishPath=%WORKSPACE%\unpackage\dist\build\web
set CliPath=D:\Client\hbuilderx\HBuilderX
set TargetPublish=D:\Client\HuiHangAdminMobileTest

echo ===== 当前工作空间 =====
echo %CliPath%

echo ===== Step 1: HBuilder CLI Project Open =====
cd /d "%CliPath%"
cli.exe open
if %ERRORLEVEL% NEQ 0 (
    echo 错误: 打开项目失败!
    exit /b 1
)

echo ===== 删除旧的发布文件 =====
if exist "%PublishPath%" (
    rd /s /q "%PublishPath%"
    echo 已删除旧的打包文件: %PublishPath%
)

echo ===== Step 2: Start Build =====
cd /d "%CliPath%"
:: CLI 执行打包并等待任务完成
cli.exe publish --platform h5 --project "%ProjectPath%"
if %ERRORLEVEL% NEQ 0 (
    echo 错误: 打包失败,请检查 HBuilder CLI 配置或项目文件!
    exit /b 1
)

:: ===== Step 3: 实时检测文件生成 =====
echo 开始检测目标文件是否生成,最多等待 5 分钟...

:: 初始化等待时间计时器(以秒为单位)
set WaitTime=0
set MaxWaitTime=300
set CheckInterval=5

:CheckFile
:: 检查是否生成了目标发布文件夹
if exist "%PublishPath%" (
    echo 打包完成,文件生成:%PublishPath%
    goto Continue
)

:: 未生成文件,则检查是否达到最大等待时间
if %WaitTime% GEQ %MaxWaitTime% (
    echo 错误: 超时 5 分钟,打包文件未生成,请检查构建过程!
    exit /b 1
)

:: 未超时,继续等待并递增计时器
timeout /t %CheckInterval% >nul 2>nul || (ping -n %CheckInterval% 127.0.0.1 >nul)
set /a WaitTime+=%CheckInterval%
goto CheckFile

:Continue

echo ===== Step 4: Copy Files to Target =====
:: 复制打包后的文件到目标路径
xcopy /e /y /q "%PublishPath%\*" "%TargetPublish%"
if %ERRORLEVEL% NEQ 0 (
    echo 错误: 文件复制失败,请检查目标路径或权限!
    exit /b 1
)

echo ----- Build and Deployment Completed Successfully! -----
exit /b 0
 

"
                    }
                  
                }
            }
        }
        stage('Build Project') {
            steps {
                script {
                    echo "===== Step 2: Start Build ====="
                    bat """
                        cd /d "${CLI_PATH}"
                        cli.exe publish --platform h5 --project "${PROJECT_PATH}"
                        if %ERRORLEVEL% NEQ 0 (
                            echo build fail!
                            exit /b 1
                        )
                    """
                }
            }
        }
        stage('Wait for Build Output') {
            steps {
                script {
                    echo "===== Step 3: 实时检测文件生成 ====="
                    echo "开始检测目标文件是否生成,最多等待 5 分钟..."

                    // 初始化等待时间计时器(以秒为单位)
                    int waitTime = 0
                    int maxWaitTime = 300
                    int checkInterval = 5
                    while (waitTime < maxWaitTime) {
                        if (fileExists("${PUBLISH_PATH}")) {
                            echo "打包完成,文件生成:${PUBLISH_PATH}"
                            break
                        } else {
                            echo "仍未生成目标文件,等待 5 秒后重试..."
                            sleep(checkInterval)
                            waitTime += checkInterval
                        }
                        if (waitTime >= maxWaitTime) {
                            error("错误: 超时 5 分钟,打包文件未生成,请检查构建过程!")
                        }
                    }
                }
            }
        }
        stage('Copy Files to Target') {
            steps {
                script {
                    echo "===== Step 4: Copy Files to Target ====="
                    bat """
                        xcopy /e /y /q "${PUBLISH_PATH}\\*" "${TARGET_PUBLISH}"
                    """
                }
            }
        }

    }

    post {
        always {
            echo "流水线执行完成"
        }
        success {
            echo "部署成功!"
        }
        failure {
            echo "部署失败,请检查原因!"
        }
    }
}

二、