67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
import os
|
|
import zipfile
|
|
import paramiko
|
|
|
|
# 配置
|
|
local_dir = './dist' # 本地要打包的目录
|
|
zip_name = './dist/dist.zip'
|
|
# 上传到服务器的 zip 路径
|
|
remote_path = '/www/wwwroot/auto-devlop/ckb-operation/dist.zip' # 服务器上的临时zip路径
|
|
server_ip = '42.194.245.239'
|
|
server_port = 6523
|
|
server_user = 'yongpxu'
|
|
server_pwd = 'Aa123456789.'
|
|
# 服务器 dist 相关目录
|
|
remote_base_dir = '/www/wwwroot/auto-devlop/ckb-operation'
|
|
dist_dir = f'{remote_base_dir}/dist'
|
|
dist1_dir = f'{remote_base_dir}/dist1'
|
|
dist2_dir = f'{remote_base_dir}/dist2'
|
|
|
|
# 1. 先运行 yarn build
|
|
print('开始执行 yarn build...')
|
|
ret = os.system('yarn build')
|
|
if ret != 0:
|
|
print('yarn build 失败,终止部署!')
|
|
exit(1)
|
|
print('yarn build 完成')
|
|
|
|
# 2. 打包
|
|
with zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED) as zipf:
|
|
for root, dirs, files in os.walk(local_dir):
|
|
for file in files:
|
|
filepath = os.path.join(root, file)
|
|
arcname = os.path.relpath(filepath, local_dir)
|
|
zipf.write(filepath, arcname)
|
|
print('本地打包完成')
|
|
|
|
# 2. 上传
|
|
transport = paramiko.Transport((server_ip, server_port))
|
|
transport.connect(username=server_user, password=server_pwd)
|
|
sftp = paramiko.SFTPClient.from_transport(transport)
|
|
sftp.put(zip_name, remote_path)
|
|
sftp.close()
|
|
transport.close()
|
|
print('上传到服务器完成')
|
|
|
|
# 3. 远程解压并覆盖
|
|
ssh = paramiko.SSHClient()
|
|
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
ssh.connect(server_ip, server_port, server_user, server_pwd)
|
|
commands = [
|
|
# 1. 解压 dist.zip 到 dist2
|
|
f'unzip -o {remote_path} -d {dist2_dir}',
|
|
# 2. 如果 dist 存在,重命名为 dist1
|
|
f'if [ -d {dist_dir} ]; then mv {dist_dir} {dist1_dir}; fi',
|
|
# 3. dist2 改名为 dist
|
|
f'mv {dist2_dir} {dist_dir}',
|
|
# 4. 删除 dist1
|
|
f'rm -rf {dist1_dir}',
|
|
# 5. 删除 dist.zip
|
|
f'rm {remote_path}'
|
|
]
|
|
for cmd in commands:
|
|
stdin, stdout, stderr = ssh.exec_command(cmd)
|
|
print(stdout.read().decode(), stderr.read().decode())
|
|
ssh.close()
|
|
print('服务器解压并覆盖完成,部署成功!')
|