利用fabric自动化发布代码
这几天,在测试环境开发python程序,但是生产的测试环境上和测试环境不一样,发布的程序涉及到3个角色,node,web和monitor,里面的配置文件要根据生产环境进行替换,用手工替换几次以后,感觉太过麻烦了,就想利用fabric进行编写脚本自动化。为什么想到用fabric?因为入门简单,文档多!
脚本的思路大致说下:
1)在本地服务器通过svn checkout命令把最新的代码,下载下来!
2)然后对里面的配置文件进行个性化的替换,然后打包成 tar.gz形式
3)分发到不同角色的服务器上,解压即可!
简单的脚本,让工作效率提高不少!
脚本如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
#! /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 = {
} env.passwords = {
} 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
1)发布程序到node_agent角色的服务器上,使用命令
fab -R node_agent deploy_node_agent
2)发布程序到node_monitor上使用命令:
fab -R node_monitor deploy_node_monitor
以上脚本,大大的提高的工作效率!
本文转自 shine_forever 51CTO博客,原文链接:http://blog.51cto.com/shineforever/1660962