fabric を使ってみた
最近 github に Sphinx で作った s6 スライドのソースを置いて、それを自分の VPS にアップロードするということが結構ある。
その時に
という手順をこなさないといけない。
大した手順ではないけれど、正直めんどい。
一回だけならいいけれど、更新掛けたり何度も書き換えるようなときは手間なのでなんとか自動化したい。
というわけで fabric を使ってみた。
fabric とは
Fabric is a Python (2.5 or higher) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.
http://docs.fabfile.org/en/1.4.3/index.html
適当に訳すと fabric とは Python2.5 以降で動く SSH を使ったアプリケーションデプロイやサーバ管理を行うためのツールである、ということらしい。
fabric の使い方
fabric は以下のようにして使う。
- easy_install/pip で fabric を入れる
- pycrypto が古かったので更新した記憶あり
- fabfile.py を書く
- fab コマンドを実行
で、問題なのは fabfile.py を書くところ。
今回書いたのは以下のようなスクリプト。
#-*- coding:utf-8 -*- import sys import os import subprocess from fabric import api api.env.hosts = ['vps_hostname'] python = '/usr/local/python2.6/bin/python' m = lambda *seq: subprocess.list2cmdline(seq) def make_docs(n): target = os.path.join('/path/to/apache/public/dir', n) with api.cd(n): api.run(m(python, '/path/to/bootstrap.py', '-d', 'init')) api.run(m('bin/buildout', '-N')) api.run(m('bin/make-docs')) api.run(m('sudo', 'rm', '-rf', target)) api.run(m('sudo', 'cp', '-r', '_build/html', target)) def deploy(): with api.cd('linuxsyscall'): api.run('git pull') make_docs('01')
で、こんなものを用意して、
$ fab deploy
ってやると api.env.hosts に設定したホストに ssh して勝手に処理してくれる。
sudo したらパスワードの入力を求めてくれるので非常に楽。
やー楽だわー。めっちゃ楽だわー