Python之——生產環境程式碼包釋出管理
程式生產環境的釋出是業務上線最後一個環境,要求具備原始碼打包、釋出、切換、回滾、版本管理等功能,本例項實現了一整套流程,其中版本切換與回滾使用了Linux的軟連結來實現。具體程式碼如下:
本例項實現了一個通用性很強的程式碼釋出管理功能,支援快速部署與回滾,無論釋出還是回滾,都可以通過切換current軟連結來實現,非常靈活。由於使用了Linux的軟連結做切換,我們的版本釋出、回滾操作使用者無感知,同時也規範了我們業務上線的流程。# -*- coding:UTF-8 -*- ''' Created on 2018年1月12日 @author: liuyazhuang ''' from fabric.api import * from fabric.colors import * from fabric.context_managers import * from fabric.contrib.console import confirm import time env.user = 'root' env.hosts = ['192.168.209.121', '192.168.209.122'] env.password = '密碼' #開發機專案主目錄 env.project_dev_source = '/data/dev/source/' #開發機專案壓縮包儲存目錄 env.project_tar_source = "/data/dev/releases/" #專案壓縮包字首,檔名為release.tar.gz env.project_pack_name='release' #專案生產環境主目錄 env.deploy_project_root = "/data/application/" #專案釋出目錄,位於主目錄下面 env.deploy_release_dir = 'releases' #對外服務的當前版本軟連結 env.deploy_current_dir = 'current' #版本號 env.deploy_version=time.strftime("%Y%m%d") + "v2" @runs_once def input_versionid(): #獲得使用者輸入的版本號,以便做版本回滾操作 return prompt("please input project rollback version ID:", default="") @task @runs_once def tar_source(): #打包本地專案主目錄,並將壓縮包儲存到本地壓縮包目錄 print yellow("Creating source package...") with lcd(env.project_dev_source): local("tar -czf %s.tar.gz." %(env.project_tar_source + env.project_pack_name)) print green("Creating source package success!") @task def put_package(): #上傳任務函式 #開始列印 print yellow("Start put package...") with settings(warn_only = True): with cd(env.deploy_project_root + env.deploy_release_dir): #建立版本目錄 run("mkdir %s" % (env.deploy_version)) env.deplog_full_path = env.deploy_project_root + env.deploy_release_dir + "/" + env.deploy_version #上傳專案壓縮包至此目錄 with settings(warn_only = True): result = put(env.project_tar_source + env.project_pack_name + ".tar.gz", env.deplog_full_path) if result.failed and not("put file failed, Continue[Y/N]?"): abort("Aborting file put task!") #成功解壓後刪除壓縮包 with cd(env.deplog_full_path): run("tar -zxvf %s.tar.gz" % (env.project_pack_name)) run("rm -rf %s.tar.gz" % (env.project_pack_name)) print green("put & untar package success!") @task def make_symlink(): #為當前版本目錄做連結 print yellow("update current symlink") env.deploy_full_path = env.deploy_project_root + env.deploy_release_dir + "/" + env.deploy_version #刪除軟連結,重新建立並制定軟連結源目錄,新版本生效 with settings(warn_only = True): run("rm -rf %s" % (env.deploy_project_root + env.deploy_current_dir)) run("ln -s %s %s" % (env.deploy_full_path, env.deploy_project_root + env.deploy_current_dir)) print green("make symlink success!") @task def rollback(): #版本回滾任務函式 print yellow("rollback project version") #獲得使用者輸入的回滾版本號 versionid = input_versionid() if versionid == '': abort("Please version ID error, abort!") env.deploy_full_path = env.deploy_project_root + env.deploy_release_dir + "/" + versionid #刪除軟連結,重新建立並制定軟連結目錄,新版本生效 run("rm -f %s" % env.deploy_project_root + env.deploy_current_dir) run("ln -s %s %s" % (env.deploy_full_path, env.deploy_project_root + env.deploy_current_dir)) print green("rollback success!") @task def go(): #自動化程式版本釋出入口函式 tar_source() put_package() make_symlink()
相關推薦
Python之——生產環境程式碼包釋出管理
程式生產環境的釋出是業務上線最後一個環境,要求具備原始碼打包、釋出、切換、回滾、版本管理等功能,本例項實現了一整套流程,其中版本切換與回滾使用了Linux的軟連結來實現。具體程式碼如下: # -*- coding:UTF-8 -*- ''' Created on 2018
python之模塊和包
sys.path 不同的 oot 鏈接庫 獨立 python代碼 都是 模塊 查詢 一 Python模塊簡介 Python模塊:可以將代碼量較大的程序分割成多個有組織,彼此間獨立但又能互相交互的代碼片段,這些自我包含的有組織的代碼段就是模塊 模塊在物理形式上表現為以.py
Python之模塊與包(下)
dir 模塊 關於 mode 二層 man manage 組織 否則 1、什麽是包 #官網解釋 Packages are a way of structuring Python’s module namespace by using “dotte
Python Django 生產環境部署
worker ini dir base cal logs ber 博客 configure 在生產上部署Django Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比較常見的一種方式。 uwsgi介紹 uWSGI是一個Web服務器,它實現了W
python之模塊、包的導入過程和開發規範
而是 port code 導入模塊 聲明 for 命名 bubuko 根據 摘要:導入模塊、導入包、編程規範 以My_module為例,My_module的代碼如下: __all__ = [‘name‘,‘read‘] print(‘in mymod
生產環境的開源容器管理平臺--Rancher入門教程(1): Environment
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Python之自測程式碼標識__name__=='__main__'
__name__是python的預設的自測程式碼標識,其他檔案匯入該python檔案時,不會執行這行程式碼以下部分。 def yangfan(a): print('yangfan %s' %a) print(__name__) #列印的是該檔名 if __name__=='__main__'
Linux企業生產環境使用者許可權集中管理專案方案案例
企業生產環境使用者許可權集中管理專案方案案例: 1 問題現狀 當前我們公司裡伺服器上百臺,各個伺服器上的管理人員很多(開發+運維+架構+DBA+產品+市場),在大家登入使用Linux伺服器時,不同職能的員工水平不同,因此導致操作很不規範
Nginx 之生產環境應用
通過nginx快取記憶體來演示 案例分析 某電商平臺商品詳情頁需要實現 700+ QPS(query操作,TPS提交操作),如何著手去做? 1. 首先為分析一下一個商品詳情頁有哪些資訊 從中得出 商品詳情頁依懶了 對於商品詳情頁涉及瞭如下主要服務: 這麼多資
python之Django的入門08------事務管理、悲觀鎖、樂觀鎖
我們接著上一篇文章的基礎上,來繼續瞭解進一步的Django框架 一.事務管理 在實際專案裡,事務管理是一個很重要的內容。 他可以保證一系列類操作要不全部成功要不全部失敗。也可以保證當多個應用程式在併發訪問資料庫時,可以在這些應用程式之間提供一個隔離方法,以防止
生產環境的開源容器管理平臺--Rancher入門教程 2 Host
Rancher是一個用於部署和管理生產環境的容器的開源平臺,它與Kubernetes/Mesos/Docker Swarm進行整合 使得在任何硬體環境上容器化應用變得觸手可及.在這個系列的教程中我們將會學習如何使用rancher, 本文主要用於介紹如何在Rancher的Cattle環境
生產環境的開源容器管理平臺--Rancher入門教程 4 自定義Catalog
Rancher是一個用於部署和管理生產環境的容器的開源平臺,它與Kubernetes/Mesos/Docker Swarm進行整合。使得在任何硬體環境上容器化應用變得觸手可及。在這個系列的教程中我們將會學習如何使用rancher, 上篇文章介紹如何在添加了Host的Cattle環境中執行
Python之虛擬環境(virtualenv)
在開發和使用過程,我們經常會遇見一些升級或者不同的配置,那很多情況下需要用到虛擬環境。 一、什麼是virtualenv? Virtualenv 是一個工具,它能夠幫我們建立一個獨立(隔離)的Python環境。想象你有一個應用程式,依賴於版本為2的第三方模組
python之三行程式碼傳送郵件
(1)首先進入cmd,輸入pip install yagmail (2)思路:1 、連線伺服器:yagmail.SMTP(郵箱賬號,郵箱密碼,郵箱伺服器地址,郵箱伺服器埠) &nb
使用Anaconda進行環境和包的管理
使用conda 首先我們將要確認你已經安裝好了conda 配置環境 下一步我們將通過建立幾個環境來展示conda的環境管理功能。使你更加輕鬆的瞭解關於環境的一切。我們將學習如何確認你在哪個環境中,以及如何做複製一個環境作為備份。 測試Python 然後我們
生產環境的開源容器管理平臺--Rancher入門教程 5 自定義Catalog工具
Rancher是一個用於部署和管理生產環境的容器的開源平臺,它與Kubernetes/Mesos/Docker Swarm進行整合。使得在任何硬體環境上容器化應用變得觸手可及。在這個系列的教程中我們將會學習如何使用rancher, 上篇文章介紹瞭如何在rancher中新增自定義的catal
python之路--paramiko實現簡單主機管理
執行緒池 首先怎麼理解執行緒池呢? 比如有十臺機器(執行緒池的大小),現在要加工一百件產品(要執行的任務)。 一件產品加工完之後(任務完成)機器(執行緒)開始加工下一件產品(新增任務到執行緒池)。 因為不能有100件產品需要加工就買100臺機器。也不能因
logminer實戰之生產環境寫入數據字典,dg環境查詢拷貝日誌,測試環境進行挖掘,輸出結果
主庫 節點 對象 markup spool 拷貝 fir 準備工作 表格 應客戶需要,對某一天的日誌進行挖掘,分析日均歸檔日誌切換數量20增長至40的原因,是什麽表的dml操作導致的日誌量劇增,最終定位某個應用(需要客戶自己進行甄別) 操作說明及介紹: 1.客戶10.2
python之虛擬環境virtualenv
virtualenv是用來處理多個用python語言進行開發的專案,在同一臺機器上部署,不同專案依賴不同第三方庫版本所造成的問題。 打個比方,現在你機器上要部署2個Django專案,A專案是用Django1.4開發的,B專案是用Django1.7開發的,
code release程式碼的釋出管理
如果專案裡面有很多個子專案,就需要使用code relase來管理子專案的程式碼的版本. 結合git使用: 大概是將預提交的程式碼指令碼拷貝的.git/hooks裡面,在git hooks能夠hoo