使用python構建一個簡單的發布系統

來源:互聯網
上載者:User

標籤:paramiko

一、流程

  通過前端上傳要發布的壓縮包,邏輯端擷取後將壓縮包分發到遠程伺服器上,並執行遠程伺服器上使用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 osfpath = ‘/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, projectkey = 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)


650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/8A/8B/wKioL1gz72aR3fhsAABK27kRcDw286.png" title="QQ20161122151002.png" alt="wKioL1gz72aR3fhsAABK27kRcDw286.png" />

更新歷史

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/8A/8C/wKioL1gz8APjVzwTAABPFmpHFAE501.png" title="QQ20161122151254.png" alt="wKioL1gz8APjVzwTAABPFmpHFAE501.png" />



使用python構建一個簡單的發布系統

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.