最近几天,在测试环境中开发和设计了python程序,但是制造的测试环境不同于测试环境。发布的程序涉及三个角色,节点、web和监视器,其中的环境变量必须根据工作环境进行更改。经过几次手动修改,觉得太麻烦,想用fabric开发脚本编写自动化技术。为什么会想到用面料?因为新手容易上手,文字文档也多!
剧本的想法大致如下:
1)根据svncheckout说明从本地服务器免费下载全新代码!
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节点代理部署节点代理
2)向node_monitor发出程序以应用指令:
fab-R节点_监视器部署_节点_监视器
脚本,大大提高工作效率!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)