jenkins在windows服务器上自动远程部署

背景说明

一般情况下我们都会使用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服务查看

参考

[1] Jenkins连接Window服务器,上传jar并启动
[2] windows服务器里实现通过ssh工具SecureCRT
[3] windows服务管理命令
[4] jar转windows服务

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容