1. 程式人生 > >Python之——生產環境程式碼包釋出管理

Python之——生產環境程式碼包釋出管理

程式生產環境的釋出是業務上線最後一個環境,要求具備原始碼打包、釋出、切換、回滾、版本管理等功能,本例項實現了一整套流程,其中版本切換與回滾使用了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()
本例項實現了一個通用性很強的程式碼釋出管理功能,支援快速部署與回滾,無論釋出還是回滾,都可以通過切換current軟連結來實現,非常靈活。由於使用了Linux的軟連結做切換,我們的版本釋出、回滾操作使用者無感知,同時也規範了我們業務上線的流程。

相關推薦

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. 首先為分析一下一個商品詳情頁有哪些資訊 從中得出 商品詳情頁依懶了 對於商品詳情頁涉及瞭如下主要服務: 這麼多資

pythonDjango的入門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