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退出。但我的服务并没有启动成功,如有知晓解决方式还请告知 谢谢。

相关推荐
宴之敖者、24 分钟前
Linux——\r,\n和缓冲区
linux·运维·服务器
LuDvei25 分钟前
LINUX错误提示函数
linux·运维·服务器
未来可期LJ32 分钟前
【Linux 系统】进程间的通信方式
linux·服务器
心理之旅43 分钟前
高校文献检索系统
运维·服务器·容器
Lenyiin1 小时前
Linux 基础IO
java·linux·服务器
The Chosen One9851 小时前
【Linux】深入理解Linux进程(一):PCB结构、Fork创建与状态切换详解
linux·运维·服务器
编码者卢布1 小时前
【App Service】Java应用上传文件功能部署在App Service Windows上报错 413 Payload Too Large
java·开发语言·windows
大佐不会说日语~1 小时前
使用Docker Compose 部署时网络冲突问题排查与解决
运维·网络·spring boot·docker·容器
2501_927773072 小时前
uboot挂载
linux·运维·服务器
Tim风声(网络工程师)3 小时前
防火墙-长链接、介绍作用
运维·服务器·网络