首先说公司项目架构吧。公司后端走的是Spring MVC,通过各种微服务实现数据的可用性和安全性。微服务用的是阿里的dubbo服务,服务是通过JAR的方式启动,因为每次部署都需要本地打包,然后上传到服务器,然后重启服务,JAR的打包是放在Jenkins里,本来想通过Jenkins搞定,发现实现不了(可能是我比较弱。。。),所以决定用脚本执行。目前部署服务需要如下几步:
1. Jenkins 打包JAR包并上传到服务器
2. Jenkins 执行Python文件杀死服务并重启服务
1不是本次的重点,2才是。
一 Python环境的搭建(小哥哥用的是Python 3.6)
这个就不赘述
二 类库的安装
到Python安装的路径下找到Scripts,这个下面是pip的执行路径,然后执行指令:
pip install wmi (如果是新手安装失败,看看是不是VS 2015没有安装,我就是这个原因造成的)
三 Python代码编写
WMI远程机器和执行bat文件网上例子都有,并非我原创。另外,我初始的想法是bat文件全部搞定,但是执行过程中发现bat文件无法启动JAR文件,没办法,只能退而求其次,先bat文件杀死服务,在window指令启动JAR文件。
服务器上根据端口杀死进程(非原创)bat文件:
@echo off
setlocal enabledelayedexpansion
for /f "delims= tokens=1" %%i in ('netstat -aon ^| findstr "50880"') do (
set a=%%i
goto js
)
:js
taskkill /f /pid "!a:~71,5!"
pause
Python程序:
import wmi
def sys_version(ipaddress, user, password):
conn = wmi.WMI(computer=ipaddress, user=user, password=password)
print("远程机器成功:" + ipaddress)
try:
filename = r"D:\pathfinder\kill-pathfinder.bat" # 此文件在远程服务器上
killJavaAppCommond = r"cmd /c call %s" % filename
conn.Win32_Process.Create(CommandLine=killJavaAppCommond) #执行bat文件 根基文件端口杀死JAVA进程
startJavaAppCommond = r"java -server -ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m -jar D:/pathfinder/pathfinder-5.4.0.jar"
conn.Win32_Process.Create(CommandLine=startJavaAppCommond) #执行bat文件 Win32_Process.Create
print("执行程序成功")
except Exception as e:
print(e)
if __name__ == '__main__':
sys_version(ipaddress="192.168.0.85", user="administrator", password="1235.com")
写在最后,执行完成后服务器上不会有cmd命令窗口,如果需要检查dubbo服务是否开启,请根据服务端口查询进程。指令如下:netstat -aon|findstr "XXXX" ,如果查询不到则说明启动失败。