时间:2021-05-22
首先是安装fabric包
fabric常用参数
-l : 显示定义好的任务函数名
-f : 指定fab入口文件,默认入口文件名为fabfile.py
-H : 指定目标主机,多台主机用","号分割
fabric常用API
local : 执行本地命令,如:local('uname -s')
lcd : 切换本地目录,如:lcd('/home')
cd : 切换远程目录,如:cd('/etc')
run : 执行远程命令,如:run('free -m')
sudo : sudo方式执行远程命令,如:sudo('touch /abc')
put : 上传本地文件到远程主机,如:put('/hello', '/home/baagee/hello')
get : 从远程主机下载文件到本地,如:get('/home/python/world', '/home/baagee/world')
reboot : 重启远程主机,如:reboot()
@task : 函数装饰器,标识的函数为fab可调用的,非标记的对fab不可见,纯业务逻辑
@runs_once : 函数装饰器,标识的函数只会执行一次,不受多台主机影响
fabric全局属性设定
env.hosts : 定义目标主机,如:env.hosts=['192.168.117.192', '192.168.117.193']
env.user : 定义用户名,如:env.user="root"
env.port : 定义目标主机端口,默认为22,如:env.port="22"
env.password : 定义密码,如:env.password="lijin"
env.passwords : 不同的主机不同的密码,如:env.passwords={'baagee@192.168.117.192:22':'lovelijin', 'lijin@192.168.117.193:22':'lovebaagee'}
简单入门示例
执行的话就不能用python fabfile.py执行了要使用:fab -f fabfile.py host_type -H baagee@192.168.117.136
意思就是-f指定文件,后面跟要执行的函数,-H指明登录用户名和host,
[root@localhost pythontest]# fab -f fabfile.py host_type -H baagee@192.168.117.136[baagee@192.168.117.136] Executing task 'host_type'[baagee@192.168.117.136] run: uname -s[baagee@192.168.117.136] Login password for 'baagee':[baagee@192.168.117.136] out: Linux[baagee@192.168.117.136] out:Done.Disconnecting from baagee@192.168.117.136... done.[root@localhost pythontest]示例1:动态获取远程目录列表
首先写个小例子熟悉一下这东西到底要怎么用:
from fabric.api import *env.hosts=['192.168.117.136']env.user='baagee'env.password = 'ubuntu@2017'@runs_oncedef input_raw(): return prompt("please input directory name:", default="/home")def workask(dirname): run('ls -l ' + dirname)@taskdef go(): print('start ...') getdirname = input_raw() workask(getdirname) print('end ...')go函数是入口函数,首先获取用户输入的路径,然后ls它,显示里面的文件就是这么简单。
执行结果显示:
[root@localhost pythontest]# fab -f test3.py go[192.168.117.136] Executing task 'go'start ...please input directory name: [/home] /home/baagee/baagee-blog[192.168.117.136] run: ls -l /home/baagee/baagee-blog[192.168.117.136] out: 总用量 24[192.168.117.136] out: -rw-rw-r-- 1 baagee baagee 0 8月 22 15:05 abcd[192.168.117.136] out: drwxrwxr-x 6 baagee baagee 4096 8月 3 10:37 Application[192.168.117.136] out: drwxrwxr-x 2 baagee baagee 4096 8月 3 10:37 DB_back[192.168.117.136] out: -rw-rw-r-- 1 baagee baagee 1009 8月 3 10:37 index.php[192.168.117.136] out: drwxrwxr-x 3 baagee baagee 4096 8月 3 10:37 Public[192.168.117.136] out: -rw-rw-r-- 1 baagee baagee 97 8月 3 10:37 README.md[192.168.117.136] out: drwxrwxr-x 8 baagee baagee 4096 8月 3 10:37 ThinkPHP[192.168.117.136] out:end ...Done.Disconnecting from 192.168.117.136... done.熟悉了之后接下来就是写一个小程序将本地某个文件夹的代码上传到执行服务器,然后执行它;
示例2:上传文件并执行
首先写个小代码:(demo.py)
#coding:utf-8def add(a,b): print('开始计算a+b') print(a+b)add(9,1)将本机centos7上的demo.py上传到ubuntu上并执行:
#coding:utf-8from fabric.api import *env.user = 'baagee'env.hosts = ['192.168.117.136']env.password = 'ubuntu@2017'@task@runs_oncedef tar_task(): #进入本地目录 with lcd('/home/vagrant/windowshare/pythontest'): #打包 local('tar zcvf demo.tar.gz demo.py')@taskdef put_task(): #创建远程服务器文件夹 run('mkdir -p /home/baagee/testdemo') with cd('/home/baagee/testdemo'): #上传文件 put('/home/vagrant/windowshare/pythontest/demo.tar.gz', '/home/baagee/testdemo/demo.tar.gz')@taskdef check_task(): #md5验证文件 lmd5 = local('md5sum /home/vagrant/windowshare/pythontest/demo.tar.gz', capture=True).split(' ')[0] rmd5 = run('md5sum /home/baagee/testdemo/demo.tar.gz').split(' ')[0] if lmd5 == rmd5: print('md5 OK ...') else: print('md5 ERROR ...')@taskdef run_task(): with cd('/home/baagee/testdemo'): run('tar zxvf demo.tar.gz') run('python demo.py')@taskdef go(): tar_task() put_task() check_task() run_task()步骤就是
1,找到demo.py打包,。2,上传,。3,验证文件md5。4,然后就是解压执行。
也很简单,当然你也可以一次性填写多个host,将他们同时上传到多台服务器上。
最后程序在我centos上执行的效果是:
[root@localhost pythontest]# fab -f upload1.py go[192.168.117.136] Executing task 'go'[localhost] local: tar zcvf demo.tar.gz demo.pydemo.py[192.168.117.136] run: mkdir -p /home/baagee/testdemo[192.168.117.136] put: /home/vagrant/windowshare/pythontest/demo.tar.gz -> /home/baagee/testdemo/demo.tar.gz[localhost] local: md5sum /home/vagrant/windowshare/pythontest/demo.tar.gz[192.168.117.136] run: md5sum /home/baagee/testdemo/demo.tar.gz[192.168.117.136] out: 12b4bed255ad7afb6a53cc84bd7a25e7 /home/baagee/testdemo/demo.tar.gz[192.168.117.136] out:md5 OK ...[192.168.117.136] run: tar zxvf demo.tar.gz[192.168.117.136] out: demo.py[192.168.117.136] out:[192.168.117.136] run: python demo.py[192.168.117.136] out: 开始计算a+b[192.168.117.136] out: 10[192.168.117.136] out:Done.Disconnecting from 192.168.117.136... done.最后结合git完成代码部署:
需要服务器和本地都需要安装git
#coding:utf-8from fabric.api import *#这两台服务器用户名和密码都一样,所以就不用env.passwords了env.user = 'baagee'env.hosts = ['192.168.117.192', '192.168.117.193']env.password = 'pythontestpass'@runs_once@taskdef local_update(): #本地代码上传到git with lcd("/home/baagee/tmp/baageehello"): local("git add -A") local("git commit -m 'update'") local("git pull origin master") local("git push origin master")@taskdef remote_update(): #服务器将git上的代码拉下来 with cd("/home/baagee/tmp/baageehello"): run("git checkout master") run("git pull origin master")@taskdef deploy(): #本地上传 local_update() #服务器下拉 remote_update()over。。。。。。。。。。。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
fabric是一个python包是一个基于ssh的部署工具包通常用来对网站微服务等等的批量部署例如我有5台线上服务器可以通过一台对着5台分发,实现自动部署的目的
Fabric是一个用Python开发的部署工具,最大特点是不用登录远程服务器,在本地运行远程命令,几行Python脚本就可以轻松部署。文档入口简单安装sudoe
一、关于fabricfabric是一个很强大的包,可以将多机操作、部署的命令固化到脚本里面,详情可参考文档http://fabric-chs.readthedo
Fabric是使用Python开发的一个自动化运维和部署项目的一个好工具,可以通过SSH的方式与远程服务器进行自动化交互,例如将本地文件传到服务器,在服务器上执
Fabric的安装Fabric支持pip,easy_install或源码方式安装,很方便解决包依赖问题,(根据用户环境,自行选择pip或ease_install