背景
有时候针对特殊项目配置,必须使用windows作为服务器使用;对于经常使用jenkins进行项目自动化的构建,所以想到的第一个念头就是如何使用jenkins进行windows项目的构建呢?
对于linux系统,需要使用ssh进行文件的传输,通过资料筛选和实践,发现windows也是同一原理。
环境配置
jenkins服务器:windows系统(windows10)
web服务器:windows系统(PC2,可以是windows10或者2012)
windows服务器powershell Server端口号设置
使用windows服务器,同样也必须支持SSH连接,这里使用的是powershell Server作为中间件,进行传输配置
powershell Server可以访问官网下载或者如下地址链接:https://pan.baidu.com/s/1iJJis5KGqR0uhXa0OZumDw 提取码:jfwx
安装完成之后使用管理员身份运行程序:打开配置,如下默认22端口如果被占用,需要修改其他端口号;这里修改端口号为1122;
jenkins-服务器putty配置&证书
客户端(jenkins服务器)连接powershell Server可以使用用户名密码连接或者通过证书连接;证书连接需要通过puttygen生成证书并上传到windows服务器上,如下打开puttygen
密钥生成后,可以为密钥设置密码,点击save private key, 保存客户端私钥,保存为自定义后缀名为“.ppk”的文件:
之后不要点击save public key,手动复制public key的内容到.txt文件保存(其他任何文件类型皆可),并上传到web服务器端:
如图
powershell Server 证书配置
web服务器上PowerShell server 配置如下,修改配置后要重启服务:
putty连接powershell server配置:
打开putty,设置IP和端口,connection-SSH-Auth 设置如下
然后点击"open"连接powershell server,连接如下:提示输入"rsa-key-20200929",需要输入连接服务器的私钥,
输入私钥之后,提示"SSH-Enable powerShell Acess for Windows"表示连接成功,如上图。
jenkins构建配置
这样jenkins服务器就可以和web服务器通信了,接下来就是通过jenkins上传war完成项目自动化构建,在jenkins系统配置中设置windows服务器的连接配置,如图
配置中需要注意连接的Username、Remote Directory、Passphrase / Password以及Port。配置好之后可以点击[Test Configuration]测试是否配置完成。
项目自动化构建
新建一个自由风格的项目,基本配置这里忽略,特别说明构建后的操作如下
killJar脚本如下
@echo off
D:
cd D:project omcat-stj omcat-rcm-stjin
::关闭tomcat
call shutdown.bat
:: 休眠10秒
ping 127.0.0.1 -n 1 >nul
jenkins-auto-start脚本如下
@echo off
:: 源文件设置
:: set SourceFile=C:"Program Files"
software"PowerShell Server 2020"sftproot
cm*.war
:: 删除发布文件
D:
rd /s/q D:project omcat-stj omcat-rcm-stjwebapps
cm_stj
echo test2
:: 新建文件夹rcm_stj
md "D:project omcat-stj omcat-rcm-stjwebapps
cm_stj"
:: XCOPY FILES
xcopy C:"Program Files"
software"PowerShell Server 2020"sftproot
cm*.war D:project omcat-stj omcat-rcm-stjwebapps
cm_stj /E /Y
echo test3
:: 重命名war包
ren D:project omcat-stj omcat-rcm-stjwebapps
cm_stj
cm*.war rcm_stj.war
:: 复制war包会/E会产生空的rcm_stj文件夹,需要删除
rd /s/q D:project omcat-stj omcat-rcm-stjwebapps
cm_stj
cm_stj
:: 解压war包
d:
cd D:project omcat-stj omcat-rcm-stjwebapps
cm_stj
jar -xvf rcm_stj.war
:: 休眠10秒
:: ping 127.0.0.1 -n 10 >nul
echo test4
::替换配置文件
copy /Y D:projectak
cm_stjjdbc.properties D:project omcat-stj omcat-rcm-stjwebapps
cm_stjWEB-INFclasses
copy /Y D:projectak
cm_stjlicense.lic D:project omcat-stj omcat-rcm-stjwebapps
cm_stjWEB-INFclasses
:: call startup.bat
:: 休眠10秒
ping 127.0.0.1 -n 10 >nul
:: 删除发布文件夹中的war包
del D:project omcat-stj omcat-rcm-stjwebapps
cm_stj*.war
:: 删除xftp中的所有war文件
del C:"Program Files"
software"PowerShell Server 2020"sftproot*.war
:: call startup.bat
:: 休眠10秒
:: ping 127.0.0.1 -n 10 >nul
::启动tomcat
D:
cd D:project omcat-stj omcat-rcm-stjin
::关闭tomcat
call startup.bat
:: 休眠10秒
ping 127.0.0.1 -n 10 >nul
脚本执行思路说明流程图如下:
其他补充
war上传位置说明
通过putty连接powershell server上传的war的默认位置是在powershell server的安装路径sftproot目录下
windows脚本命令
del是删除文件夹的命令
rd或rmdir是删除文件夹包括文件
copy是复制单一的文件信息,而xcopy是复制包括文件夹
错误处理
在构建时会出现提示如图"ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 960,001 ms]"
这个问题经查证是:连接超时,而Jenkins无法从脚本中正确退出。可以参考https://stackoverflow.com/questions/11290540/jenkins-text-finder-unable-to-success-my-build
解决方法:
第一步:在构建后操作钟,设置"Exec timeout(ms)"设置为项目构建时间,为毫秒为单位;这里根据项目情况设置为960000;且勾选"Exec in pyt"如图
第二步:在Exec command中添加"exit 0"作为结束,如图
参考
https://blog.csdn.net/achenyuan/article/details/81166526