一.General 配置

Discard old builds 保持构建的最大个数 5 个

This project is parameterized 参数配置

Choice Parameter:选择参数
名称:Status(用于参数传递)
选项:Deploy(部署)Rollback(回滚)

String Parameter:输入参数
名称:svn(更新信息提交参数)
默认值(定义该字段的默认值,允许用户在保存时修改为真实的值)
名称:Version(svn 回滚信息提交参数,svn 版本号)
默认值(定义该字段的默认值,允许用户在保存时修改为真实的值)


修改自定义工作空间(项目实际拉取打包目录)

二.源码管理

勾选项目所需要的

配置 Gitlad 或 Github 项目地址

凭证添加,已配置凭证点击 Credentials 选择即可

未配置凭证。点击添加下 jenkins 进入 Jenkins Credentials Provider: Jenkins
根据需求添加,添加后选中凭证即可


Branches to build 更改为需要的分支地址

(我这里演示的线上默认主分支,所以没有配置参数;可以通过 String Parameter 进行输入参数化或者 Git Parameter 进项自动获取项目全部分支进行参数化)

String Parameter 参数化


Git Parameter 参数化


三.构建环境

根据需求添加
Delete workspace before build starts:构建前清空工作目录(确保每次拉取代码是最新的)
Add timestamps to the Console Output:在 Jenkins 在控制台输出中显示构建时间

四.Build Steps

构建步骤选择: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

五.构建后操作

通过 Send build artifacts over SSH 进行远程执行命令或传输文件

(这里是远程执行 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 则可以看到脚本执行信息


↙↙↙阅读原文可查看相关链接,并与作者交流