使用python构建一个简单的发布系统

一、流程

通过前端上传要发布的压缩包,逻辑端获取后将压缩包分发到远程服务器上,并执行远程服务器上使用shell编写的发布脚本,实现代码发布。

二、前端文件上传代码

<form id="codeForm" method=‘post‘ action=‘/code/‘ class="form-horizontal nice-validator n-yellow" novalidate="novalidate" enctype=‘multipart/form-data‘>
<div class="form-group">
    <label for="package" class="col-sm-2">需要上传的包<span class="red-fonts">*</span></label>
    <br>
    <div class="col-sm-12">
	<input id="package" name="package" type="file" datatype=‘*‘/><!-- 上传时type为file -->
     </div>
</div>
</form>

三、逻辑端

1、保存文件到指定位置

import os
fpath = ‘/usr/local/zip/‘

file = request.files.get(‘package‘)                         # 获取压缩包
filename = secure_filename(file.filename)                   # 确保文件格式正确
if ‘.‘ in filename and filename.split(‘.‘,1)[1] == ‘zip‘:   # 确保文件是*.zip格式
    where = os.path.join(fpath,filename)
    file.save(where)                                        # 保存为where指定的路径

2、将文件分发到远程服务器,并执行远程命令

app.config.from_object(RemoteHost)
hosts = []

for i in app.config:
    if re.findall(‘HOST.‘,i):                               # 正则匹配HOST.类型
        hosts.append(app.config.get(i))
        # hosts格式为[[‘192.168.1.100‘, 22, ‘root‘, ‘123456‘],[‘192.168.1.101‘, 22, ‘root‘, ‘123456‘],...]

def trans(where,filename):
    ssh = paramiko.SSHClient()                              # 初始化ssh对象
    comm = ‘/root/test.sh ‘+where                           # 远程服务器上要执行的命令
 
    for i in hosts:
        # 文件传输
        tus = (i[0],i[1])
        t = paramiko.Transport(tus)
        t.connect(username=i[2],password=i[3])
        sftp = paramiko.SFTPClient.from_transport(t)        # 初始化sftp对象
        sftp.put(where,‘/tmp‘+filename)                     # 传输到‘/tmp‘下
        t.close()
           
        # 执行远程命令
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机(可选项)
        ssh.connect(i[0],i[1],i[2],i[3],timeout=10)
        stdin,stdout,stderr = ssh.exec_command(comm)        # 执行远程命令
        ssh.close()

四、数据端

将前端获取的一些其他数据保存到数据库

data = dict((k,v[0]) for k,v in dict(request.form).items()) # message, key, project
key = data.pop(‘key‘)
data[‘update_persion‘] = session.get(‘name‘)                # 添加执行人
data[‘package‘] = filename                                  # 添加上传的包名
conditions = [ "%s=‘%s‘" %  (k,v) for k,v in data.items()]
if key == ‘abcde‘:                                          # 许可码正确就执行操作
    try:  
        trans(where,filename)
        db.add(‘code‘,conditions)                           # 写入数据库
        return render_template(‘/code/code.html‘,result=‘更新成功!‘,role = role)
    except Exception, e:
        errmsg = ‘失败信息 error: ‘+str(e)
        return render_template(‘/code/code.html‘,result=errmsg,role = role)
else:
    return render_template(‘/code/code.html‘,result=‘许可码无效!‘,role = role)

效果图

更新历史

时间: 2024-10-05 15:28:00

使用python构建一个简单的发布系统的相关文章

第三周——构建一个简单的Linux系统MenuOS

[洪韶武 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ] 第三周  构建一个简单的Linux系统MenuOS

构建一个简单的Linux系统 MenuOs —— start_kernel到init进程(20135304刘世鹏)

构建一个简单的Linux系统 MenuOs —— start_kernel到init进程 作者:刘世鹏20135304 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核代码简介 内核源码三个个重要目录 arch占有代码量最大,支持不同cpu的源代码,arch/x86目录下的代码是我们关注的重点 init,内核启动相关的代码基本都在init目录下,init/main.c中start_kernel是整

通过python 构建一个简单的聊天服务器

构建一个 Python 聊天服务器 一个简单的聊天服务器 现在您已经了解了 Python 中基本的网络 API:接下来可以在一个简单的应用程序中应用这些知识了.在本节中,将构建一个简单的聊天服务器.使用 Telnet,客户机可以连接到 Python 聊天服务器上,并在全球范围内相互进行通信.提交到聊天服务器的消息可以由其他人进行查看(以及一些管理信息,例如客户机加入或离开聊天服务器).这个模型如图 1 所示. 图 1. 聊天服务器使用 select 方法来支持任意多个客户机 聊天服务器的一个重要

《Linux内核分析》第三周 构建一个简单的Linux系统MenuOS

[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK THREE(2.29——3.6)构造一个简单的Linux系统MenuOS SECTION 1 Linux内核源代码简介 1.操作系统的两把宝剑(回顾上一讲) 中断上下文的切换——保存现场&恢复现场 进程上下文的切换 2.Linux内核源代码简介 打开内核源代码页面 arch/目录:支持不同CPU的源代码:其中的

Python运维三十六式:用Python写一个简单的监控系统

市面上有很多开源的监控系统:Cacti.nagios.zabbix.感觉都不符合我的需求,为什么不自己做一个呢 用Python两个小时徒手撸了一个简易的监控系统,给大家分享一下,希望能对大家有所启发 首先数据库建表 建立一个数据库“falcon”,建表语句如下: 1 CREATE TABLE `stat` ( 2 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 3 `host` varchar(256) DEFAULT NULL, 4 `mem_fr

python构建一个简单的备份脚本

编写思路: 1.建立一个空的列表,把需要备份的数据写入到列表,方便后面调用. 2.建立备份存放的目录. 3.调用os模块从列表里面读取数据,然后调用tar 命令进行备份. #!/usr/bin/python#luohuiimport timeimport sysimport ossource =[]backup_dir='/backup'import ossource =[]backup_dir='/backup'today = backup_dir + os.sep + time.strfti

Python高级编程之生成器(Generator)与coroutine(四):一个简单的多任务系统

啊,终于要把这一个系列写完整了,好高兴啊 在前面的三篇文章中介绍了Python的Python的Generator和coroutine(协程)相关的编程技术,接下来这篇文章会用Python的coroutine技术实现一个简单的多任务的操作系统 代码如下,可看注释 1 #-*-coding:utf-8 -*- 2 ''' 3 用Python和coroutine实现一个简单的多任务系统 4 ''' 5 # ##Step 1:Define Tasks###########################

如何基于Python构建一个可扩展的运维自动化平台

嘉宾简介 刘天斯 从事互联网运维工作已13年,目前就职于腾讯-互动娱乐部,负责游戏大数据的运营,曾就职于天涯社区,担任首席架构师/系统管理员. 热衷开源技术的研究,包括系统架构.运维开发.负载均衡.缓存技术.数据库.NOSQL.分布式存储.消息中间件.大数据及云计算.Mesos.Docker.DevOps等领域.擅长大规模集群的运维工作,尤其在自动化运维方面有着非常丰富的经验.同时热衷于互联网前沿技术的研究,活跃在国内社区.业界技术大会,充当一名开源技术的传播与分享者. 导言 受 Reboot

Linux内核设计第三周——构造一个简单的Linux系统

Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核源代码分析 arch/目录保存支持多种CPU类型的源代码 其中的关键目录包括:Documentation.drivers.firewall.fs(文件系统).include init目录:含有main.c,内核启动相关的代码基本都在init目录下 start_kernal()函数为启动函数,初始化内