Jenkins发布windows服务器jar

一、背景

之前是linux服务器部署的项目,现在转为windows服务器部署。jenkins和git都已经部署好了。所以本文只会重点讲Jenkins调用windows服务器bat命令及bat命令的编写概况。

二、详情操作

1、Jenkins调用windows bat文件

首先在Jenkins项目配置"高级项目选项"-pipeline scipt 填入脚本

bash 复制代码
pipeline {
    agent any
    stages {
        stage('pull code from gitlab') {
            steps {
                git branch: '${branch}', url: 'git@XXXX.git'
            }
        }
        stage('maven clean install') {
            steps {
                sh 'mvn clean'
                sh 'mvn package'
            }
        }
        stage('send file and restart') {
            steps {
               sshPublisher(publishers: [sshPublisherDesc(configName: '服务器IP', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''call E:\\program\\restart.bat''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/program', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/abc-1.0.0.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
            }
        }
        
    }
}

脚本注意事项:

①:替换git项目具体的url

②:替换服务器具体的ip

③:替换windows下项目具体的jar包路径 remoteDirectory

④:替换sourceFiles项abc具体的项目名称

⑤:exexCommand:调用windows服务器路径中的bat文件,\\是转义windows文件夹分隔符\

2、编写windows下bat命令文件
bash 复制代码
@echo off
::查找之前的项目是否正在运行  该处的jar包名称要和 start运行处的 jar包名称 保持一模一样
for /F "delims= " %%a in ('jps -lv ^| find /i "E:\program\abc.jar"') do set PID1=%%a

::如果正在运行则杀掉进程 
::注意, "%PID1%"=="" 等号两边不要加空格,  if 后如果跟括号的话, 括号前后要加空格, 否则语法错误
if not "%PID1%"=="" (
taskkill /f /t /PID %PID1%
) 
::休眠7秒
waitfor SomethingThatIsNeverHappening /t 7 2>NUL
::删除旧的jar包, 先判断, 如果jar包存在则删除
if exist "E:\program\abc.jar" del E:\program\abc.jar

::从jenkins的工作空间中 复制jar包
copy C:\Users\adminUser\program\abc-1.0.0.jar E:\program\abc.jar

::运行 java 程序, 此处jar包名称要和查找进程处的 jar包名称 一模一样
::如果是从nacos中读取配置信息的话, 要添加-Dfile.encoding=utf-8, 因为nacos默认是utf8编码, cmd运行默认使用gbk编码, 编码不一致导致配置文件读取错误
java -Dfile.encoding=utf-8 -Dhudson.util.ProcessTree.disable=true  -jar E:\program\abc.jar --spring.profiles.active=dev > E:\program\abc.log 2>&1 &
exit

注意事项:

①:该bat文件如果不是ANSI(UTF8)格式的话第一行会被转义 不过第一行命令报错的话影响也不大。

②:从jenkins推到服务器的jar包路径默认路径我的是:C:\Users\adminUser\program\abc-1.0.0.jar

需要改成你自己的路径。

③:Jenkins执行该脚本后并不是绿色Success标识,但并不影响实际效果。原因是等待java -命令超时。解决方式可在java -前加 start 意为后台执行该命令。而后执行exit退出。但我的服务并没有启动成功,如有知晓解决方式还请告知 谢谢。

相关推荐
_OP_CHEN几秒前
【Git原理与使用】(二)Git 配置与基本操作全攻略:从配置到实战,新手也能轻松上手!
linux·运维·git·版本管理·企业级组件·git基本操作·git配置
gaize121319 分钟前
服务器全套知识科普
服务器
wadesir20 分钟前
Linux文件系统创建(从零开始构建你的存储空间)
linux·运维·服务器
边疆.25 分钟前
【Linux】库制作与原理
linux·运维·动态库·静态库·动态链接·静态链接
嵌入式小能手1 小时前
飞凌嵌入式ElfBoard-文件I/O的深入学习之I/O多路复用
linux·服务器·学习
墨北x1 小时前
2025 年江西省职业院校技能大赛(中职组)《网络建设与运维》赛项样题
运维·网络
一条咸鱼¥¥¥1 小时前
【运维经验】ESXi虚拟机磁盘设置精简置备,需要回收所占用未能释放的空间
运维
测试人社区—小叶子1 小时前
边缘计算与AI:下一代智能应用的核心架构
运维·网络·人工智能·python·架构·边缘计算
小嘟嘟131 小时前
从基础到进阶:掌握 userdel,玩转 Linux 用户管理的 “减法” 艺术
linux·运维·网络·shell
测试人社区—小叶子1 小时前
金融系统迁移测试:历时半年的完整实践复盘
运维·网络·人工智能·python·测试工具·金融