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"
                 }
           }
    }
}

posted @   lujiacheng-python  阅读(571)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2018-09-14 Python全栈开发——生成器和迭代器
点击右上角即可分享
微信分享提示