这几天,在测试环境开发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
1)发布程序到node_agent角色的服务器上,使用命令
fab -R node_agent deploy_node_agent
2)发布程序到node_monitor上使用命令:
fab -R node_monitor deploy_node_monitor
以上脚本,大大的提高的工作效率!
本文出自 “shine_forever的博客” 博客,请务必保留此出处http://shineforever.blog.51cto.com/1429204/1660962
原文地址:http://shineforever.blog.51cto.com/1429204/1660962