利用fabric自動化發佈代碼

這幾天,在測試環境開發python程序,但是生產的測試環境上和測試環境不一樣,發佈的程序涉及到3個角色,node,web和monitor,裏面的配置文件要根據生產環境進行替換,用手工替換幾次以後,感覺太過麻煩了,就想利用fabric進行編寫腳本自動化。爲什麼想到用fabric?因爲入門簡單,文檔多!


腳本的思路大致說下:

1)在本地服務器通過svn checkout命令把最新的代碼,下載下來!

2)然後對裏面的配置文件進行個性化的替換,然後打包成 tar.gz形式

3)分發到不同角色的服務器上,解壓即可!

簡單的腳本,讓工作效率提高不少!


腳本如下:

#! /usr/bin/env python
# coding:utf-8


from fabric.api import *

local_app_dir = "/usr/local/cimp_deloy"
local_conf_dir = "/local/cimp_deloy/conf"
remote_dir = "/usr/local"

env.roledefs = {
    'node_agent': ['root@xxxxxx','root@xxxxxxx'],
    'cimp': ['root@xxxxxx',],
    'node_monitor': ['root@xxxxxx',]
}

env.passwords = {
    'root@xxxx': 'xxx',
    'root@xxxxxx': 'xxxx',
    'root@xxxxx': 'password',
    'root@xxxxxx': 'password',
}




def svn_to_local():
    """
    把svn最新版本文件download對應目錄;
    :return:
    """
    with lcd(local_app_dir):
        local("rm -rf /usr/local/cimp_deloy/CIMP")
        local("rm -rf /usr/local/cimp_deloy/*.tar.gz")
        local("svn co svn://xxxxxx/CIMP")

def pack_to_cimp():
    """
    打包給cimp_web服務器使用
    :return:
    """
    with lcd(local_app_dir):
        local("\cp -a /usr/local/cimp_deloy/conf/settings.py /usr/local/cimp_deloy/CIMP/cimp_web/cimp/.")
        local("tar cvfz cimp_web.tar.gz CIMP/cimp_web")

    print "pack_to_cimp 完成!"

def pack_to_node_agent():
    """
    打包給node_agent服務器使用
    :return:
    """
    with lcd(local_app_dir):
        local("\cp -a /usr/local/cimp_deloy/conf/config.ini /usr/local/cimp_deloy/CIMP/node_agent/.")
        local("tar cvfz node_agent.tar.gz CIMP/node_agent")

def pack_to_monitor():
    """
     打包給node_monitor服務器使用
    :return:
    """
    with lcd(local_app_dir):
        local("\cp -a /usr/local/cimp_deloy/conf/conf.py /usr/local/cimp_deloy/CIMP/node_monitor/client/.")
        local("tar cvfz node_monitor.tar.gz CIMP/node_monitor")



def run_test():
    run('uname -a')


@roles('cimp')
def deploy_cimp():
    """
    傳輸文件到遠端cimp服務器上
    :return:
    """
    pack_to_cimp()

    with lcd(local_app_dir), cd(remote_dir):
        run("rm -rf cimp_web.tar.gz")
        put("cimp_web.tar.gz",remote_dir)
        run("tar zxvf cimp_web.tar.gz")

    print "cimp code update finish"


@roles('node_agent')
def deploy_node_agent():
    """
    把更新程序發佈到node_agent上
    :return:
    """
    pack_to_node_agent()
    with lcd(local_app_dir), cd(remote_dir):
        run('pwd')
        run("rm -rf node_agent.tar.gz")
        put("node_agent.tar.gz",remote_dir)
        run('pwd')
        run("tar zxvf node_agent.tar.gz")

    print "node_agent update finish"

@roles('node_monitor')
def deploy_node_monitor():
    """
    把更新包發佈到node_monitor
    :return:
    """
    pack_to_monitor()
    with lcd(local_app_dir), cd(remote_dir):
        run("rm -rf node_monitor.tar.gz")
        put("node_monitor.tar.gz",remote_dir)
        run("tar zxvf node_monitor.tar.gz")

    print "node_monitor update finish"

記住,腳本名稱已經要是fabfile.py,不能修改,執行命令要在fabfile的當前下操作,或者指定文件,用fab -f 文件名 


查看編寫腳本中的可以使用的命令用fab -l

wKiom1V5XSSAKUZaAAHtzqCQGeQ934.jpg


1)發佈程序到node_agent角色的服務器上,使用命令

fab -R node_agent deploy_node_agent


2)發佈程序到node_monitor上使用命令:

fab  -R node_monitor deploy_node_monitor



以上腳本,大大的提高的工作效率!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章