如何使用Jenkins在windows服务器上自动远程部署?

发表于:2019-9-30 11:49

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:瑜骐    来源:51Testing软件测试网原创

分享:
  背景说明
  一般情况下我们都会使用linux作为服务器,但是在现实开发和实施中,会遇到一些情况必须使用windows作为服务器的情况;对于这种情况想通过jenkins实现自动部署,就没有linux这么简单,这篇文章主要说明jenkins如何自动服务到windows服务器的方法和步骤
  部署步骤
  整体框图说明
  Windows服务器上安装SSH
  为了在windows服务器能够通过SSH进行访问,需要安装响应的SSH服务,安装采用的是powershell server,具体安装方法参照下面对应的参考[2],但是有几点需要说明:
  
  登录powershell server对应的用户名
登录powershell server对应的用户名
  其中powershellserver对应的按照路径如下图所示:
  image.png
  Jenkins相关配置
  先在jenkins上指定对应的远程SSH server的主机地址,名称,用户名和密码,具体步骤如下图所示:
  
 jenkins 配置SSH server信息
  jenkins 配置SSH server信息
  jenkins 配置SSH server信息
  
  部署项目相关配置
  为了能够灵活执行一键部署,需要在项目中增加如下内容,如下图所示:
  项目增加的内容
  文件jenkins-copy.bat对应的文件内容,如下所示:
   @echo on
  mkdir %1
  cd /d %1
  rem 查询对应的windows服务是否存在
  sc query %3
  if %errorlevel% == 0 (
  echo 'service exist'
  ) else (
  echo 'service not exist'
  )
  rem 暂停对应的window服务
  net stop %3
  rem 通过ping暂停指定的秒数
  set SLEEP=ping 127.0.0.1 /n
  %SLEEP% 5 > nul
  rem 删除指定的windows服务
  sc delete %3
  %SLEEP% 5 > nul
  rem 创建历史文件夹目录
  mkdir history
  rem 将原来的内容重命名拷贝到历史文件夹中
  move %4.jar history/%4-%Date:~0,4%%Date:~5,2%%Date:~8,2%%Time:~0,2%%Time:~3,2%%Time:~6,2%.jar
  rem 拷贝ssh server路径下的内容到服务安装目录
  copy %2\trade-app\target\*.jar .
  copy %2\trade-app\src\main\resources\*.yml .
  copy %2\install-deploy\*.*  .
  rem windows服务安装
  %4.exe install
  %SLEEP% 10 > nul
  rem windows服务启动
  net start %3
  rem %SLEEP% 5 > nul
  文件trade-app-0.0.1-SNAPSHOT.exe和文件trade-app-0.0.1-SNAPSHOT.xml的作用是将对应的java服务安装成windows服务,具体的可以参照参考[4],其中trade-app-0.0.1-SNAPSHOT.xml文件内容如下:
   <?xml version="1.0" encoding="UTF-8"?>
  <service>
  <!-- windows服务的id -->
  <id>trade-api</id>
  <!-- windows服务的名称 -->
  <name>trade-api</name>
  <description>HaiYi Trade Api</description>
  <!--<executable>C:\Program Files\Java\jdk1.8.0_161\bin\java</executable>-->
  <executable>C:\Program Files\Java\jdk1.8.0_131\bin\java</executable>
  <arguments>-server -Xmx768m -Xms768m -Xss256k -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=40 -XX:+PrintGCDateStamps -Xloggc:./logs/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs/java.hprof -XX:+DisableExplicitGC -XX:-OmitStackTraceInFastThrow -XX:+PrintCommandLineFlags -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Djava.util.Arrays.useLegacyMergeSort=true -Dfile.encoding=UTF-8 -jar -Dspring.config.location=./application.yml  "trade-app-0.0.1-SNAPSHOT.jar"</arguments>
  <!-- 注意上面的 "trade-app-0.0.1-SNAPSHOT.jar" 要替换成自己的 -->
  <logmode>rotate</logmode>
  <!-- <log mode="roll-by-size-time">
  <sizeThreshold>10240</sizeThreshold>
  <pattern>yyyyMMdd</pattern>
  <autoRollAtTime>00:00:00</autoRollAtTime>
  <zipOlderThanNumDays>5</zipOlderThanNumDays>
  <zipDateFormat>yyyyMM</zipDateFormat>
  </log> -->
  </service>
  Jenkins 项目配置
  在项目里面配置Send build artifacts Over SSH 内容,如下图所示:
  Send build artifacts Over SSH配置
  源路径配置
  路径不包含项目名称
  对应的Exec command 内容如下
   cd C:\"Program Files"\nsoftware\"PowerShell Server 2016"\sftproot
  cd install-deploy
  ./jenkins-copy.bat F:\V5\tradeapi-cashBond C:\"Program Files"\nsoftware\"PowerShell Server 2016"\sftproot trade-api-cashBond trade-app-0.0.1-SNAPSHOT
  rem 对参数进行说明 **F:\V5\tradeapi-cashBond** 表示项目在SSH server上安装的路径;**C:\"Program Files"\nsoftware\"PowerShell Server 2016"\sftproot** 表示SSH server对应的按照路径即是对应jenkins上**remote directory** 的“/”的含义;**trade-api** 表示部署在SSH server上对应的windows服务的名称;**trade-app-0.0.1-SNAPSHOT** 对应的是需要安装服务的exe文件名称
  验证
  在windows服务器上打开服务,如下图所示:
  windows服务查看

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号