初学者--JenKins 设置版本回滚
- Jenkins一、安装插件
1.版本管理插件 :Version Number Plugin
2. 参数配置插件:Extended Choice Parameter Plugin
二、配置参数和版本
1.版本号生成配置

2. 回退设置:

配置第二参数,用来选择脚本:

配置完以后构建不再立即生成,而是出现选择构建和回滚及版本号选择(版本号只针对回滚生效)

构建批处理脚本:Execute Windows batch command
@echo off chcp 65001 >nul 2>&1 & rem 强制使用UTF-8编码 setlocal enabledelayedexpansion set "SITE_NAME=太阳能源" :: ===== 停止站点 ===== C:\Windows\System32\inetsrv\appcmd.exe stop site /site.name:"%SITE_NAME%" if %errorlevel% neq 0 ( echo ## 错误:停止站点失败 exit /b 1 ) :: ===== 1. 创建有效的语义化版本号 ===== rem 使用纯数字格式:年.月.日.构建号 set "YEAR=%DATE:~-10,4%" set "MONTH=%DATE:~-5,2%" set "DAY=%DATE:~-2,2%" set "BUILD_NUM=%BUILD_NUMBER%" set "SEM_VER=%YEAR%.%MONTH%.%DAY%.%BUILD_NUM%" :: ===== 2. 解析构建参数 ===== echo [构建] 当前动作: %ACTION% echo [构建] 选择版本: %VERSION% :: ===== 3. 如果是回滚操作 ===== if /i "%ACTION%"=="Rollback (回滚操作)" ( set "BACKUP_SOURCE=D:\JenkinsWork\history\xycore\%VERSION%" set "TARGET_DIR=D:\Steel\太阳能碳\core\xynt" echo [回滚] 开始回滚到版本: %VERSION% :: 验证备份是否存在 if not exist "!BACKUP_SOURCE!\" ( echo ## 错误: 指定的备份版本不存在: !BACKUP_SOURCE! echo 可用版本列表: dir D:\JenkinsWork\history\xycore /b exit /b 1 ) :: 停止服务 net stop "XYCoreAPIService" 2>nul :: 执行回滚 robocopy "!BACKUP_SOURCE!" "!TARGET_DIR!" /MIR /MT:16 /NP /NFL /NDL :: 启动服务 cd /d "!TARGET_DIR!" dotnet Supcon.Core.Api.dll --urls http://192.168.1.32:8063 echo [成功] 回滚完成! 当前版本: %VERSION% exit /b 0 ) :: ===== 4. 创建版本化备份目录 ===== echo [插件] 当前构建版本: %BUILD_VERSION% if "%BUILD_VERSION%"=="" set BUILD_VERSION=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2% set "BACKUP_DIR=D:\JenkinsWork\history\xycore\%BUILD_VERSION%" mkdir "!BACKUP_DIR!" >nul 2>&1 echo [备份] 创建备份目录: !BACKUP_DIR! :: ===== 5. 清理工作区准备发布 ===== cd /d "D:\JenkinsWork\workspace\XYCoreAPI" rd /s /q api_publish 2>nul :: ===== 6. 构建项目 ===== echo [构建] 开始发布Supcon.Core.Api (使用版本: !SEM_VER!)... dotnet publish "Supcon.Core.Api\Supcon.Core.Api.csproj" ^ --configuration Release ^ --framework net8.0 ^ --output "api_publish" ^ -p:AppendTargetFrameworkToOutputPath=false ^ -p:AppendRuntimeIdentifierToOutputPath=false ^ -p:Version="!SEM_VER!" :: ===== 7. 验证编译输出 ===== if not exist "api_publish\Supcon.Core.Api.dll" ( echo ## 错误: 编译输出文件缺失 echo 请检查以下目录内容: dir /s /b "api_publish" exit /b 1 ) :: ===== 8. 复制到生产环境 ===== set "TARGET_DIR=D:\Steel\太阳能碳\core\xynt" echo [部署] 正在部署到生产环境: !TARGET_DIR! robocopy "api_publish" "!TARGET_DIR!" /MIR /MT:16 /NP /NFL /NDL :: ===== 9. 备份生产环境 ===== echo [备份] 正在备份生产环境到历史目录... robocopy "!TARGET_DIR!" "!BACKUP_DIR!" /MIR /MT:16 /NP /NFL /NDL :: ===== 10. 验证备份 ===== if not exist "!BACKUP_DIR!\Supcon.Core.Api.dll" ( echo ## 错误: 备份文件未创建 echo 请检查源目录内容: dir "!TARGET_DIR!" /b exit /b 1 ) echo [备份] 备份验证成功! :: ===== 11. 启动服务 ===== cd /d "!TARGET_DIR!" echo [服务] 启动应用服务... :: ===== 启动站点 ===== C:\Windows\System32\inetsrv\appcmd.exe start site /site.name:%SITE_NAME% echo 站点 [%SITE_NAME%] 已重启完成! ::dotnet Supcon.Core.Api.dll --urls http://192.168.1.32:8063 :: ===== 13. 记录备份信息 ===== echo [备份] 生成备份记录文件... echo 构建时间: %DATE% %TIME% > "!BACKUP_DIR!\build_info.txt" echo 构建ID: %BUILD_NUMBER% >> "!BACKUP_DIR!\build_info.txt" echo 语义版本: !SEM_VER! >> "!BACKUP_DIR!\build_info.txt" echo 目标位置: !TARGET_DIR! >> "!BACKUP_DIR!\build_info.txt" echo Git提交: %GIT_COMMIT% >> "!BACKUP_DIR!\build_info.txt" echo =========================================== echo [成功] 部署完成! echo [备份] 历史版本保存在: !BACKUP_DIR! echo [版本] 当前语义版本: !SEM_VER! echo [构建ID] %BUILD_NUMBER% echo =========================================== exit /b 0