发布时间: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 "部署失败,请检查原因!"
}
}
}
二、