Fabric 简单使用

最近公司组织压测系统,要在多台机子上部署代码,可是机子上的代码与生产环境不一样,需要修改代码,还有有问题的地方要修改,然后再发代码。这边一共有7台服务务器,重新发代码,要一台一台 ssh 上去,输入用户名和密码,然后切换目录,再 git pullpm2 restart ***, (是的我司使用 node),一两次还可以手动,随着修改的次数多了,这个事情变的麻烦的事情,发一次代码要开 7个ssh,手指都打断了。

终于受不了之后,决定找工具自动化解决这个问题。(我们线上是可以自动化的部署的,只是测试环境没有运维来支持,只能自己弄)。

node 做运维这块工作不是擅常的, 找了一会发现一个 python 的运维工具 fabric 。这下这个工作就简单了,学下 python 代码 10 分钟,看了fabric文档 30 分种,折腾环境 30 分钟, 到写出工具加调试 50 分钟,二个小时,把能用的工具做出来,不得不说,python 是非常强大的。

fabric 介绍

fabric 是一个使用 ssh 执行命令的工具,它是一款运维工具。用我的理场就是使用ssh自动化执行你的命令的工具。使用环境env, 你就能指定目标(user, password, hosts), 然后运行 run 命令。理解这个些概念,就可以做一款非常基础的工具了。

from fabric.api import *

env.user = 'root'
env.password = '123456'
env.hosts = [
'192.168.104.37',
'192.168.104.50',
'192.168.104.65',
'192.168.104.73',
'192.168.104.77',
'192.168.104.78',
'192.168.104.82',
] pc_dir = '/home/test/test-node'
h5_dir = '/home/test/testwap-node' pc_app = 'testnode'
h5_app = testwap-node' src_dir = h5_dir if env.has_key('p') else pc_dir
app = h5_app if env.has_key('p') else pc_app @task
@parallel
def name():
run('hostname') @task
@parallel
def pull():
with cd(src_dir):
run('git pull') @task
@parallel
def install():
with cd(src_dir):
run('npm i') @task
@parallel
def deploy():
with cd(src_dir):
run('git pull')
run('pm2 restart %s' % (app)) @task
@parallel
def branch():
with cd(src_dir):
run('git branch') @task
@parallel
def fetch():
with cd(src_dir):
run('git fetch -p') @task
@parallel
def checkout():
with cd(src_dir):
run('git checkout feature/qps') @task
@parallel
def start():
with cd(src_dir):
run('pm2 start process.json') @task
@parallel
def restart():
with cd(src_dir):
run('pm2 restart %s' % (app)) @task
@parallel
def list():
with cd(src_dir):
run('pm2 list') @task
@parallel
def log():
with cd(src_dir):
run('pm2 logs %s' % (app)) @task
@parallel
def env():
run('cat /etc/profile | grep TEST')

注意:

  1. fabric 可以在 windows 上使用,只是不能使用 @parallel
  2. fabric 要求 python 2.7 以上, 但是不能在 python 3.X 上使用。
  3. 我在 windows 上使用,用的 conda 安装配置多个python 环境。

项目代码: github

相关链接

fabric中文版

最新文章

  1. 将MongoDB服务加入随机启动
  2. Hibernate之二级缓存
  3. ABP JTable如何手动刷新子表数据
  4. iOS开发——UI基础-提示框
  5. __declspec(dllimport)
  6. ASP.NET会话(Session)保存模式--终于知道session为什么丢失了
  7. Oracle_集合
  8. sql2012 新增 OFFSET/FETCH
  9. thinkphp中session跨域问题
  10. Gora_百度百科
  11. CentOS7修改网卡名称,禁用ipv6
  12. vue项目中的相关插件
  13. 一些日期的计算方式 PHP
  14. 用于模拟百度分享的errno错误代码
  15. 当鼠标经过表格数据行时颜色不同且奇偶行颜色也不同 (纯CSS)
  16. HBase多条件及分页查询的一些方法
  17. 关于MVC开发时,无法找到area的问题记录
  18. 【BZOJ1484】[HNOI2009]通往城堡之路 (贪心)
  19. base64 数据编码原理
  20. R语言如何将字符串转变为命令执行

热门文章

  1. AOP原理
  2. ubuntu 16.04 apt-get 出现The package 'xxx' needs to be reinstalled, but I can't find an archive for it.
  3. 单次目标检测器-SSD简介
  4. Azure AD (6) 停止Azure AD Connect Sync同步,并删除自定义域名
  5. 通过url在两个页面之间传值
  6. classpath路径指什么
  7. c++中IO输入输出流总结<一>
  8. c++拷贝函数详解(转)
  9. TP5实现签到功能
  10. Modulation of Lipid Metabolism by Celastrol (文献分享一组-赵倩倩)