在软件开发过程中,自动化发布是一个重要的环节,它可以提高发布效率、减少人为错误,并且能够确保发布过程的一致性。本文将介绍使用Python实现自动化发布的几个步骤:本地编译、本地压缩和服务器上传解压。
1. 本地编译
在进行自动化发布之前,首先需要确保代码在本地能够成功编译。这一步骤通常包括以下几个操作:
检查代码库的完整性和更新性。
安装所需的依赖库和工具。
执行编译命令,生成可执行文件或构建项目。
可以使用Python的os.system
来执行命令行操作,例如:
import os
def buildProject(proDir):
cmd1 = 'cd ' + proDir
cmd2 = 'npm run build'
cmd = cmd1 + ' && ' + cmd2
os.system(cmd)
2. 本地压缩
编译成功后,下一步是将生成的文件打包成压缩包,以便于上传到服务器。Python 的zipfile
模块提供了压缩和解压缩文件,的功能,可以使用以下代码实现本地压缩:
import zipfile
def zipDir(dirpath, outFullName):
zip = zipfile.ZipFile(outFullName, "w", zipfile.ZIP_DEFLATED)
for path, dirnames, filenames in os.walk(dirpath):
# 去掉目标跟路径,只对目标文件夹下边的文件及文件夹进行压缩
fpath = path.replace(dirpath, '')
fpath = fpath and fpath + os.sep or ''
for filename in filenames:
zip.write(os.path.join(path, filename), os.path.join(fpath, filename))
print('压缩文件 => ' + outFullName)
zip.close()
3. 上传到服务器解压
最后一步是将压缩包上传到服务器,并在服务器上解压。可以使用 Python 的paramiko
库来实现SSH连接和文件传输,以下是一个简单的示例:
# pip3 install paramiko
import paramiko
# pip3 install scp
from scp import SCPClient
def uploadZipThenUnzip(targetZip,remote_path, remote_zip):
host = "xx.xx.xx.xx" #服务器ip地址
port = 22 # 端口号
username = "root" # ssh 用户名
password = "******" # 密码
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh_client.connect(host, port, username, password)
# upload
scpclient = SCPClient(ssh_client.get_transport(),socket_timeout=15.0)
try:
scpclient.put(targetZip, remote_path)
except FileNotFoundError as e:
print("系统找不到指定文件 => " + remote_path)
else:
print("文件上传成功 => " + remote_path)
# unzip
print('4.unzip')
stdin,stdout,stderr = ssh_client.exec_command('unzip -o ' + remote_zip + ' -d ' + remote_path)
out = stdout.read()
err = stderr.read()
if out:
print('解压成功 => ' + remote_zip)
else:
print('解压失败 =>' + remote_zip)
ssh_client.close()
上述代码中,host
是服务器的IP地址,username
和password
是登录服务器的用户名和密码。scpclient.put
函数用于上传文件,exec_command
函数用于在服务器上执行命令。
通过以上三个步骤,我们可以实现 Python 自动化发布的流程,提高发布效率并减少人为错误。当然,根据实际需求,你还可以添加其他步骤,如自动化测试、数据库迁移等,以满足具体的发布需求。