前言
前段时间成功通过Jenkins将一个必须运行在windows上的springboot项目部署到远程的windows7上,记录一下以备后查。
1. 安装FreeSSHd
第一步,官网下载http://www.freesshd.com/?ctt=download,选择freeSSHd.exe。安装据说需要具有管理员权限,我使用的administrator账户登录的。安装时其他都是默认安装选项,只有最后两步会弹出对话框询问是否生成私钥和是否设置为系统服务,选择“yes"即可,因为没有生成私钥,SSH服务将不能启动,设置系统服务的话每次开机都会自动启动SSH服务。
第二步,结束掉进程里面的freesshdservice.exe进程,然后双击桌面的freesshd图标进行配置,先到User选项卡添加SSH用户,如图,添加默认的系统管理员帐号,authorization选择NT authentication,这样的话密码就是系统管理员帐号的密码。然后勾选shell,SFTP选项,确定添加。
第三步,选择SSH,配置如下,然后在SFTP中设置home path。
第四步,选择Authentication选项卡,password authentication项选择Required项,Public key authentication选择Disabled项。如果不这样设置连接的时候将会出现Access denied的错误,导致ssh客户端不能连接。
第五步,右键点击任务栏下的freesshd图标点击Unload退出软件,然后重新打开freesshd软件。打开后点击Server status下的Click here to start 启动SSH服务
第六步,添加22端口的防火墙放行,>> 控制面板\系统和安全\Windows 防火墙\高级设置\入站规则\新建规则:
规则类型:端口,下一步;特定本地端口:22,下一步;允许连接,下一步;何是应用该规则选择全部,下一步;名称随便取,完成。
最后,可以找个测试机,利用putty使用ssh协议连接目标主机的22端口,使用administrator以及系统登录密码测试连接即可。
2. 配置Jenkins插件
第一步,安装Publish Over SSH插件,Jenkins > Manage Jenkins > Manage Plugins > 找到 Publish Over SSH插件安装重启Jenkins .
第二步,配置Publish Over SSH插件,菜单路径: Jenkins > Manage Jenkins > Configure System > Publish over SSH,添加一个SSH Servers,
Name随便取,Hostname是远程windows7的IP,Passphrase / Password填对应的administrator账户的密码,在Advanced中Port指定端口22. 填写完成之后可以使用Test Configuration测试连接是否成功。
3. 创建并启动Jenkins Slave节点
第一步,创建节点,菜单路径是Jenkins > Manage Jenkins > Manage Nodes > New Node:
Node name随便取一个,选中Permanent Agent,点击OK进入详细页面,其中Labels 填写的名称一会要用在创建作业中,注意Launch method选择的选项:
创建完成之后,节点的状态是离线状态,需要在远程windows7上启动节点。可以在刚刚创建的节点status页面得到指导。
第二步,在windows7上登录到Jenkins管理界面,进入刚刚创建的节点的status页面(如下图),下载agent.jar到本地,然后在cmd命令运行图中的命令,之后下面的界面将会显示“Agent is connected.”
4. 准备启停bat脚本
在springboot项目src\main\resources下创建两个bat脚本,如下所示:
@echo off setlocal enabledelayedexpansion set port=8885 for /f "tokens=1-5" %%a in (‘netstat -ano ^| find ":%port%"‘) do ( if "%%e%" == "" ( set pid=%%d ) else ( set pid=%%e ) echo !pid! taskkill /f /pid !pid! ) exit 0
@echo off set BUILD_ID=dontKillMe set JAVA_HOME=D:\jdk\jdk1.8.0_251 set classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar set path=%JAVA_HOME%\bin java -jar xxxx-0.0.1-SNAPSHOT.jar exit
shudown.bat 脚本用于杀死占用8885端口的应用程序(因为这个项目部署之后是运行在8885端口),最后的exit 0是告诉Jenkins在进行作业编译的时候是成功结束的,因为可能有时候根本没有占用该端口的程序,脚本就会抛异常,从而Jenkins会认为任务执行失败。
start.bat 脚本就是用于执行 springboot jar,这里还可以设置使用的jdk版本,并且这样的JAVA_HOME设置不会影响远程主机的环境变量。注意 set BUILD_ID=dontKillMe 是告诉Jenkins在执行任务完成之后不要杀死后台进程,这很重要!!!
5. 创建Jenkins作业
我创建了三个*风格的任务,第一个任务执行shudown.bat,第二个任务执行 从git拉取代码maven打包之后通过Publish Over SSH将jar推送到远程windows7主机。第三个任务执行start.bat 启动项目,可以通过配置任务的上下游关系将它们关联起来。
6. 运行测试