初学者--JenKins 设置版本回滚

- Jenkins

一、安装插件

   1.版本管理插件 :Version Number Plugin

   2. 参数配置插件:Extended Choice Parameter Plugin 


二、配置参数和版本

  1.版本号生成配置

       image.png

  2. 回退设置:

       image.png

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

         image.png


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

 image.png

           构建批处理脚本: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
相关文章!