实现目的:
有时候想把本地代码打包到服务器上用于联调测试,由于公司项目较多,等jenkins发布要排队耗费好长时间,所以自己写了一个脚本,将本地服务自动打包发布到服务器上。
效果:
最后打成了一个exe,直接点击,一键发布
实现过程:
核心功能:
1.完成jar包上传
一开始考虑了java,但是后来发现打成exe有点大,就放弃了java,选用了python paramiko
def ssh_upload(self,fromPath, toPath):
sftp_client = paramiko.SFTPClient.from_transport(self.t)
sftp_client.put(fromPath,toPath,callback=self.put_call_back)
sftp_client.close()
print("上传成功")
2.完成服务启停
这里讨了一个巧,利用上传shell脚本,命令都写到了shell脚本里,通过调用脚本实现服务的启停
jarfile="bootstrap-1.0.jar"
logfile="output.log"
command="java -jar ${jarfile}"
case "$1" in
start)
echo "INFO: Starting $jarfile ..."
exec nohup $command > $logfile 2>&1 &
;;
stop)
echo "INFO: stopping $jarfile ..."
ps -ef | grep "$jarfile" |grep -v 'grep'|awk '{print $2}' | while read pid
do
C_PID=$(ps --no-heading $pid | wc -l)
if [ "$C_PID" == "1" ]; then
echo "INFO: process(PID=$pid) end!"
exec kill -9 $pid
else
echo "WARN: process(PID=$pid) does not exist!"
fi
done
echo "INFO: $jarfile stopped!"
;;
esac
其他功能补充:
1.将maven工程打包,利用python 调用系统命令
#重新打包项目
def mvn_package(self):
os.chdir(self.projectPath)
os.system('mvn clean')
os.system('mvn package -Dmaven.test.skip=true')
2.将脚本做成exe
这里使用了pyinstaller,全部命令如下
pip install pyinstaller
pyinstaller abc.py --onefile
3.界面化
这里使用了tikinter,本来以为是内置想讨巧,不过也不算太复杂
if __name__ == '__main__':
tk = Tk('开发环境升级发布')
host = Linux(tk)
comboxlist= OptionMenu(tk,host.comvalue,*host.choisces)
comboxlist.pack()
b = Button(tk,text='发布',command=host.upgrade)
b.pack()
tk.mainloop()
4.数据配置化
一开始准备读取数据库,这样就不够独立了,改成了读取配置文件
def __init__(self,tk,timeout=30):
self.config = configparser.ConfigParser()
self.config.read('upgrade.ini', encoding='utf-8')
self.choisces = tuple(json.loads(self.config.get('config', 'envList')))
self.comvalue=StringVar(tk)
self.comvalue.set(self.choisces[0])
# 定义环境
[config]
#对应下面的不同环境
envList=["1","2"]
#对应上面环境
[1]
#服务器地址
host=172.168.1.1
#服务器账号
username=root
#服务器密码
password=root
#本地工程根目录
projectPath=D:\\Users\\IdeaProjects\\server\\
#本地工程打包后目录
srcDir=D:\\Users\\IdeaProjects\\server\\target\\
#服务器jar包存放目录
destDir=/home/test/upgrade
#服务名称
jarName=server-1.0.jar
#对应上面环境
[2]
#服务器地址
host=172.168.1.2
#服务器账号
username=root
#服务器密码
password=root
#本地工程根目录
projectPath=D:\\Users\\IdeaProjects\\client\\
#本地工程打包后目录
srcDir=D:\\Users\\IdeaProjects\\client\\target\\
#服务器jar包存放目录
destDir=/home/test/upgrade
#服务名称
jarName=client-1.0.jar
成果地址:
https://download.csdn.net/download/weixin_39424099/16269659
参考:
1.https://www.jianshu.com/p/dc764cec9fa9
2.https://blog.csdn.net/m0_37264397/article/details/79090754