jar包或者war包在jenkins中ssh连接windows关闭后程序继续运行
war包在jenkins中ssh连接windows关闭后程序继续运行
思路:可以借助windows的服务去实现这一操作
Jenkins在windows中配置ssh连接
1.首先下载
OpenSSH-Win64-v8.9.1.0.msi 软件 默认安装路径为C:\Program Files
2.在将OpenSSH软件安装目录添加到windows的环境变量path中
这一步很关键,不然在jenkins中测试ssh连接会出错
错误信息:jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection. Message: [Failed to connect SFTP channel. Message [java.io.IOException: inputstream is closed]]
3.在Jenkins中安装插件
1.SSH server插件 默认jenkins中ssh端口是关闭的,需要打开
Manage Jenkins > Security > Configure Global Security
进入该页面,选择随机选取
2.Publish over SSH插件
4.配置ssh连接,通过密码连接(在高级这里可以使用密码连接)
ssh连接运行程序
1.首先
windows在安装jenkins时,安装目录会有一个jenkins.exe软件,这个是实现jenkins.war包在windows下服务注册、启动、停止
将这个软件复制出来,重命名为winsw.exe
2.配置需要运行的jar包或者war包
新建winsw.xml文件,写入配置
<service>
<!-- 注册服务名 -->
<id>global-bgd-producer</id>
<name>global-bgd-producer</name>
<description>This service runs global-bgd-producer.</description>
<!-- 配置java执行路径 -->
<executable>C:\Program Files\Java\jdk1.8.0_05\bin\java.exe</executable>
<!-- 你自己运行的war包或jar包路径 -->
<arguments>-jar "D:\global-bgd-producer\global-bgd-producer.war" --httpPort=8081</arguments>
<logmode>rotate</logmode>
<onfailure action="restart"/>
<extensions>
<!-- This is a sample configuration for the RunawayProcessKiller extension. -->
<extension enabled="true" className="winsw.Plugins.RunawayProcessKiller.RunawayProcessKillerExtension" id="killOnStartup">
<pidfile>%ProgramData%\global-bgd-producer\global-bgd-producer.pid</pidfile>
<stopTimeout>10000</stopTimeout>
<stopParentFirst>false</stopParentFirst>
</extension>
</extensions>
</service>
3.管理服务
注册服务
winsw.exe install winsw.xml
开始服务
winsw.exe start winsw.xml
停止服务
winsw.exe stop winsw.xml
卸载服务
sc delete global-bgd-producer 上面xml配置文件中的id
Jenkinsfile配置
前提需要安装SSH Pipeline Steps插件,这样才可以使用sshCommand remote命令
//gitlab的凭证
def git_auth = "7144af5d-e41b-47f5-a475-eb334b6bc7bd"
def absolute_path = "D:\\Jenkins_home\\workspace\\${workspace}"
def GetRemoteServer(ip){
def remote = [:]
remote.name = ip
remote.host = ip
remote.port = 22
remote.allowAnyHosts = true
//通过withCredentials调用Jenkins凭据中已保存的凭据,credentialsId需要填写,其他保持默认即可
withCredentials([usernamePassword(credentialsId: '14e413bb-10af-4859-a938-ec3638dde925', passwordVariable: 'password', usernameVariable: 'userName')]) {
remote.user = "${userName}"
remote.password = "${password}"
}
return remote
}
node {
stage('pull project') {
checkout([$class: 'GitSCM', branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],
userRemoteConfigs: [[credentialsId: "${git_auth}", url:
'http://32.1.0.85/lujiacheng/global-bgd-producer.git']]])
}
stage('tranfer file') {
withEnv(["JENKINS_NODE_COOKIE=dontkillme"]){
rserver = GetRemoteServer('32.1.1.138')
script{
//调用上面定义好的方法
sshCommand remote: rserver, command: "scp ${absolute_path}\\interface\\global-bgd-producer\\target\\global-bgd-producer.war D:\\global-bgd-producer"
sshCommand remote: rserver, command: "scp ${absolute_path}\\winsw.exe D:\\global-bgd-producer"
sshCommand remote: rserver, command: "scp ${absolute_path}\\winsw.xml D:\\global-bgd-producer"
sshCommand remote: rserver, command: "D:\\global-bgd-producer\\winsw.exe stop D:\\global-bgd-producer\\winsw.xml"
sshCommand remote: rserver, command: "sc delete global-bgd-producer"
sshCommand remote: rserver, command: "D:\\global-bgd-producer\\winsw.exe install D:\\global-bgd-producer\\winsw.xml"
sshCommand remote: rserver, command: "D:\\global-bgd-producer\\winsw.exe start D:\\global-bgd-producer\\winsw.xml"
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2018-09-14 Python全栈开发——生成器和迭代器