1:首先需要用到的技术工具:python,ftp(两个软件的安装程序可以参考官网)注意版本(这边python还需要安装一个扩展包)
https://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/(python扩展包下载地址)
2:第一步先把需要解压缩到指定目录的tar.gz的包复制到其中一台服务器,放置于特定的文件夹下,(怎么打tar.gz递增包这个可以参考http://www.itkeyword.com/doc/6679723549668741761)
我这边就放置于桌面,后面的路径会与其相关
然后就是更新本机的两个服务(由于这边做了一个真实,一个测试,两个同时更新)代码如下(用python写的):脚本名:update.py
import os
import tarfile
from ftplib import FTP
import socket
import struct
import time
user_home = 'C:\Users\Administrator\Desktop\update'#建议写成相对路径方便使用
resin_home = 'E:\www'
web_home_8080 = '%s\\resin-8080\webapps\sxzyc_v2' %(resin_home)
web_home_8082 = '%s\\resin-8082\webapps\sxzyc_v2' %(resin_home)
file_name = '%s\sxzyc_v2.tar.gz' %(user_home)
logs_home_8080 = 'E:\www\\resin-8080\logs';
logs_home_8082 = 'E:\www\\resin-8082\logs';
log_home_8080 = 'E:\www\\resin-8080\log';
log_home_8082 = 'E:\www\\resin-8082\log';
def stopNginxAndResin():
os.system("net stop WWW_8080")#停止服务
os.system("net stop WWW_8082")
def extractFile_8080():
os.system("echo 'starting extract sxzyc file 8080...'");
tar = tarfile.open(file_name)#解压文件
tar.extractall(path=web_home_8080)#到指定路径
tar.close()
def extractFile_8082():
os.system("echo 'starting extract sxzyc file 8082...'");
tar = tarfile.open(file_name)
tar.extractall(path=web_home_8082)
tar.close()
def updateSourceCode():
os.system("echo 'update sxzyc source code....'");
extractFile_8080()
extractFile_8082()
def startNginxAndResin():
time.sleep(2)
os.system("net start WWW_8080")
os.system("net start WWW_8082")
def deleteFiles():
os.system("echo 'deleteFiles ....'");
os.system("del %s\sxzyc.log" %(logs_home_8080));
os.system("del %s\sxzyc.log" %(logs_home_8082));
print "del %s\*.log" %(log_home_8080)
print "del %s\*.log" %(log_home_8082)
os.system("del %s\*.log" %(log_home_8080));
os.system("del %s\*.log" %(log_home_8082));
if __name__ == "__main__":
stopNginxAndResin()
time.sleep(1)
deleteFiles()
time.sleep(1)
updateSourceCode()
startNginxAndResin()
这上面的代码就可以直接更新,并且重启服务,就可以避免繁杂的操作
然后我们在另外一台服务器安装ftp(用于传输文件)脚本名synchronization.py
需要在接收服务器安装ftp并且创建一个用户和命名,指定一个文件夹(参考如下)指定的路径必须正确(就是这台服务器待会需要更新的脚本里面指定的路径)
import ftplib
import hashlib
import os
from ftplib import FTP
ftp_server = "11.22.22.33"#接收服务器ip
ftp_port = "21"#ftp端口
ftp_user = "update"/#
ftp_password = "update"
filePath = 'C:\Users\Administrator\Desktop\update\sxzyc_v2.tar.gz'
serverPath = ''
cmd_stor = "STOR %s" %(os.path.split(filePath)[1])
print(cmd_stor)
ftp = FTP(ftp_server, ftp_user, ftp_password)
ftp.getwelcome()
ftp.storbinary(cmd_stor, open(filePath, 'rb'))
ftp.close()
然后将第一台服务器写的Update.py脚本copy一份到改服务器上(注意具体项目路径具体修改)
最后一步就是点击第一台服务器上的脚本远程执行改台服务器update脚本(第一次麻烦一点,以后就可以不用连接第二台服务器,在第一台服务器上就可以直接更新两台服务的的应用)
代码如下(脚本名 operation.py)
# -*- coding: utf-8 -*-
import wmi
import json
import time
import socket
logfile = 'logs_%s.txt' % time.strftime('%Y-%m-%d_%H-%M-%S', time.localtime())
#远程执行.py文件
def call_remote_bat(ipaddress,username,password):
try:
#用wmi连接到远程服务器
conn = wmi.WMI(computer=ipaddress, user=username, password=password)
filename=r"C:\Users\Administrator\Desktop\update\update.py" #此文件在远程服务器上
cmd_callbat=r"cmd /c call %s"%filename
conn.Win32_Process.Create(CommandLine=cmd_callbat) #执行bat文件
print "执行成功!"
return True
except Exception,e:
print "aaa!"
log = open(logfile, 'a')
log.write(('%s, call bat Failed!\r\n') % ipaddress)
log.close()
return False
return False
if __name__=='__main__':
call_remote_bat(ipaddress="11.22.22.33", username="administrator", password="root")
这样就完成了两台服务器的应用更新工作(方便分布式部署的更新,不用连续上几个服务器)