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中文版

Fabric 简单使用的更多相关文章

  1. fabric简单案例

    1  执行一个简单的task任务,显示两台机器的/home/guol/目录下的文件 from fabric.api import * env.users='root' env.port=22 env. ...

  2. fabric 安装及简单使用 (centos6)

    fabric 是一个python的库,fabric可以通过ssh批量管理服务器. 第一步安装依赖包 安装epel源 1 wget -O /etc/yum.repos.d/epel.repo http: ...

  3. 系统批量运维管理器Fabric详解

    系统批量运维管理器Fabric详解 Fabrici 是基于python现实的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包 ...

  4. fabric 安装

    fabric 是一个python的库,fabric可以通过ssh批量管理服务器. 第一步安装依赖包 安装fabric依赖及pip yum install -y python-pip gcc pytho ...

  5. 拥抱Service Fabric —— 目录

    理解分布式 经典分布式系统设计 云时代分布式系统演进 Service Fabric基础概念 Node, Application, Service, Partition/Replicas Partiti ...

  6. 批量执行命令:fabric

    Fabric 可以通过 SSH 在多台客户端主机上批量执行任务,是基于 paramiko 封装开发的,paramiko 更底层一些,安装方法如下: [root@localhost ~]$ yum in ...

  7. python 各种开源库

    测试开发 来源:https://www.jianshu.com/p/ea6f7fb69501 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. 链接 sel ...

  8. Python测试 ——开发工具库

    Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. selenium - web UI自动化测试. mechanize- Python中有状态的程序化Web浏 ...

  9. 第10章:深入浅出Ansible

    1.Ansible介绍 1).Ansible的优点 Ansible是一个简单的自动化引擎,可完成配置管理.引用部署.服务编排以及其他各种IT需求 Ansible是Python开发并实现的开源软件,其依 ...

随机推荐

  1. JS-React:目录

    ylbtech-JS-React:目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbt ...

  2. 开始我的技术bolg之旅

    虽然做了快十年的IT但是真心觉得自己的水平很烂,IT这个行业keep learning很重要,之前每接触新东西都是随便学一下,有问题解决了就完事了,或者是再有问题临时抱佛脚,从来都没把学过或者做个的事 ...

  3. 十五、事务(Transaction)

    1.事务是什么? 2.示例 查询事务的隔离级别, 1>会话级(select @@tx_isolation或select @@session.tx_isolation) 2>全局级(sele ...

  4. Ubuntu 安装indicator-sysmonitor

    之前就像安装一个软件用来查看Ubuntu的CPU, 内存, 网速情况, 终于让我碰到了--indicator-sysmonitor 仅需三条命令, 你值得拥有: sudo add-apt-reposi ...

  5. CSS元素:clip属性作用说明

    clip属性是一个比较有用的属性,但往往在实际应用中,并不多见,介绍的也很少.应用clip属性需要注意的两点: 一.clip属性必须和定位属性postion一起使用才能生效. 二.clip裁切的计算坐 ...

  6. Android开发--数据存储之File文件存储

    转载来自:http://blog.csdn.net/ahuier/article/details/10364757,并进行扩充 引言:Android开发中的数据存储方式 Android提供了5种方式存 ...

  7. LightOJ 1022 【读题】

    求阴影面积: 犯了两个错误,漏看了两个条件. 第一个wa:题面中PI说要取pi = 2 * acos (0.0) 第二个wa: For example, add 10-9 to your result ...

  8. Unity开发MMOARPG游戏解决方案

    http://www.csdn.net/article/2015-05-07/2824634 天神互动是一家已经上市的以研发MMOARPG游戏为主的技术公司,<苍穹变>是天神互动研发的第一 ...

  9. springMVC常用传参总结

    本文介绍了springMVC常用的传参方式和一些注意的事项,页面表单主要以ajax的形式提交. 本帅是个菜鸡,水平有限,若有什么讲得不对或有补充的地方欢迎各位提意见. 一.传递String类型   1 ...

  10. SpringBoot 2.0 整合sharding-jdbc中间件,实现数据分库分表

    一.水平分割 1.水平分库 1).概念: 以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中. 2).结果 每个库的结构都一样:数据都不一样: 所有库的并集是全量数据: 2.水平分表 1).概 ...