本文记录用fabric自动部署自己写的webtools工程,节约每次上线的时间
fabric安装很简单直接apt-get install fabric
,但是在windows上面安装会出现如下错误:缺少visual c++ 9.0的情况。只需要下载Microsoft Visual C++ Compiler for Python 2.7安装即可。安装好后会在scripts目录下生成一个fab.exe文件,将其加入环境变量即可。
fabric的基本语法很简单,我这里直说几个常用的函数。
第一步导入模块,from fabric.api import run, cd
,run
命令是在远程服务器上面执行命令的函数,cd
是跳转目录的函数。比如要在远程服务器的/home
目录下执行ls
命令的话,代码如下:
from fabric.api import run, cd
def exec_code():
with cd('/home'):
run('ls')
只需要在本地执行fab exec_code -H user@remote_host
,程序会自动提醒输入密码登录,然后执行相关的操作。
我的需求很简单,每次写完一部分之后需要在树莓派进行重新部署django工程,同时settings.py
及wsgi.py
文件与开发环境有所不同,所以不能覆盖。所以我的基本部署的步骤如下:
- 从git中fetch下来
- 跳到工程目录,删除除
settings.py
及wsgi.py
的所有文件- 将新的工程复制过来
- 覆盖
settings.py
及wsgi.py
- pip install新的库
- 执行migrate
- 重启apache
总结起来写出的代码如下所示,使用方法为fab push_code -H xx@xx.xx.xx.xx
,fabric只是提供了一个框架,能够自动的判断命令是否执行成功,执行不成功即停止运行,并且能够程序自动提示登录ssh,通过该模块能更快的进行批量部署,如安装apache或者mysql等软件:
# coding=utf8
from fabric.api import run, cd
def push_code(path='/home/webtools-rep'):
with cd(path):
run('git fetch origin master')
with cd('/home/webtools'):
run('mv /home/webtools/webtools/settings.py /home')
run('mv /home/webtools/webtools/wsgi.py /home')
run('rm -rf *')
run('cp -R /home/webtools-rep/webtool/* ./')
run('mv /home/settings.py ./webtools')
run('mv /home/wsgi.py ./webtools')
run('source /home/env/bin/activate')
run('pip install -r /home/webtools/requirements.txt')
run('python manage.py migrate')
run('/etc/init.d/apache2 restart')