Choice Parameter:选择参数
名称:Status(用于参数传递)
选项:Deploy(部署)Rollback(回滚)
String Parameter:输入参数
名称:svn(更新信息提交参数)
默认值(定义该字段的默认值,允许用户在保存时修改为真实的值)
名称:Version(svn 回滚信息提交参数,svn 版本号)
默认值(定义该字段的默认值,允许用户在保存时修改为真实的值)
修改自定义工作空间(项目实际拉取打包目录)
勾选项目所需要的
配置 Gitlad 或 Github 项目地址
凭证添加,已配置凭证点击 Credentials 选择即可
未配置凭证。点击添加下 jenkins 进入 Jenkins Credentials Provider: Jenkins
根据需求添加,添加后选中凭证即可
(我这里演示的线上默认主分支,所以没有配置参数;可以通过 String Parameter 进行输入参数化或者 Git Parameter 进项自动获取项目全部分支进行参数化)
String Parameter 参数化
Git Parameter 参数化
根据需求添加
Delete workspace before build starts:构建前清空工作目录(确保每次拉取代码是最新的)
Add timestamps to the Console Output:在 Jenkins 在控制台输出中显示构建时间
构建步骤选择:Execute Windows batch command
**脚本部分**
@echo off
set DOTNET_CLI_UI_LANGUAGE=en-US
set DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
set DOTNET_RUNTIME_ID=win-x64
REM 对于非标准但可能影响系统的全局编码设置,可以尝试(但这不是必须的,因为.NET默认已经是UTF-8)
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
REM 项目路径
set "PROJECT_DIR=D:\xxxx\xxxx.WebApi"
REM 项目发布路径
set "PUBLISH_DIR=D:\xxxx\xxxx.WebApi_pub"
REM SVN来提交
set "SVN_DIR=D:\svn\xxxx.WebApi"
rem 设置 SVN 仓库的 URL
set REPO_URL=svn:/xxxx/xxxx.WebApi
rem 设置要还原到的项目版本号
set TARGET_PROJECT_VERSION=%Version%
rem 设置本地工作副本路径
set WORKING_COPY=D:\xxxx\xxxx.WebApi
REM 检查部署状态
if "%Status%"=="Deploy" (
echo Status: %Status%
echo svn:%svn%
echo 构建发布...
cd /d "%PROJECT_DIR%"
dotnet publish -c release -r win-x64 -o "%PUBLISH_DIR%" --self-contained false
rem 复制到svn
cd /d "%SVN_DIR%"
svn up --username "username" --password "password"
xcopy /e /y /h /k /q "%PUBLISH_DIR%\*" "%SVN_DIR%"
rem 提交svn版本
echo 清理...
cd /d "%SVN_DIR%" && svn cleanup && echo 清理成功
set "BUILD_OUTPUT_DIR=%SVN_DIR%"
for /f "tokens=2 delims= " %%a in ('svn status ^| findstr "^!"') do (
svn rm "%%a"
)
svn add . --no-ignore --force
svn status | findstr "^[ADM]" >nul && (
set "SVN_USERNAME=username"
set "SVN_PASSWORD=password"
set "SVN_COMMIT_USER=--username %SVN_USERNAME% --password %SVN_PASSWORD%"
svn commit %SVN_COMMIT_USER% -m "%svn%" || (
echo No new build artifacts to commit.
exit /b 1
)
) || (
echo No new build artifacts to commit.
exit /b 1
)
echo Completing!
) else if "%Status%"=="Rollback" (
REM 回滚操作
echo Status: %Status%
echo Version: %Version%
rem 切换到工作副本目录
cd /d %WORKING_COPY%
rem 获取最新版本号
svn update
rem 执行 SVN merge 命令将整个工作副本回滚到指定版本
svn merge -r HEAD:%TARGET_PROJECT_VERSION% .
rem 提交变更到 SVN 仓库
svn ci -m "Revert to project version %TARGET_PROJECT_VERSION%"
rem 获取提交信息
set COMMIT_INFO=
for /f "tokens=*" %%i in ('svn info --show-item=revision %WORKING_COPY%') do set COMMIT_INFO=%%i
echo "Reverted to revision %COMMIT_INFO%"
)else (
REM 如果 Status 既不是 Deploy 也不是 Rollback,则退出
echo 无效的状态: %Status%
exit /b 1
)
exit /b 0
(这里是远程执行 cmd 脚本,停止 iis 后,使用 svn 更新项目,在重新启动)
**远程执行脚本**
@echo off
echo 停止IIS站点...
C:\Windows\System32\inetsrv\appcmd.exe stop site "iis网站名称"
C:\Windows\System32\inetsrv\appcmd.exe stop appPool /appPool.name:"iis网站名称"
C:\Windows\System32\inetsrv\appcmd.exe stop site "iis网站名称"
C:\Windows\System32\inetsrv\appcmd.exe stop appPool /appPool.name:"iis网站名称"
echo 停止成功。
echo %time%
ping -n 6 127.0.0.1>nul
echo %time%
echo 清理...
cd /d D:\project
svn cleanup
echo 清理成功
echo 发布项目...
svn update "D:\svn项目目录" --username "username" --password "username"
echo 发布成功。
echo %time%
ping -n 6 127.0.0.1>nul
echo %time%
echo 启动项目...
C:\Windows\System32\inetsrv\appcmd.exe start site "iis网站名称"
C:\Windows\System32\inetsrv\appcmd.exe start appPool /appPool.name:"iis网站名称"
C:\Windows\System32\inetsrv\appcmd.exe recycle appPool /appPool.name:"iis网站名称"
echo 启动成功。
在 SSH Server 高级中勾选 Verbose output in console 则可以看到脚本执行信息