sudoできたり結構良いツールなのですよ〜
最近chefやvagrant等、世間では色々な事を自動化する流れになっています。
乗るしかない、このビッグウェーブに!、ということで、今回触ってみたのはfabricというデプロイ・システム管理ツールです。
Welcome to Fabric’s documentation! — Fabric documentation
以前の記事でantのビルドを脱却してgradleに移行する記事を書き、移行する事ができたので、成果物を配布・デプロイ、という部分をいい感じに自動化する部分を何とかするため、fabricを触ってみることにしました。
目標は、jenkinsでチェックアウト+gradleでビルド、fabricで成果物を配布・デプロイ、です。
今回はまだ触っただけの状態なので、具体的なサンプルコードはほとんど掲載しません。実は触ったのはほんの30分程度ですが、色々思った事を書いてみようと思います。
インストール
私の場合はmacにインストールしてみました。
yumもダメ、homebrewもダメ(Formulaが無い)、というちょっとアレな状態で、代わりにeasy_installでインストールしました。macの場合はできればhomebrewに統一したいですね。
sudo easy_install fabric
これだけでインストールが完了したので簡単でした。
pythonはプレインストールのv2.7があったので、特にインストールしていません。
IDE
macの場合、pythonでいい感じのIDEって無いんですよね・・
eclipse + PyDevもいいんですが、windowsのPyScripter等と比較して明らかに劣っている気がします。
仕方ないのでエディタ(SublimeText2)でゴリゴリ書いているのですが、importするものが何のか解らない!のです。
↓例えばこんなやつです。
from fabric.api import run, sudo, local, put
eclipse + javaの場合、importはideにお任せで、自分で手打ちする事なんてまずありません。
しかしエディタなので、そもそも何をimportしたらいいか解らず、相当戸惑いました。
私は基本eclipse + javaの開発ばっかりなので、できればeclipseでいい感じにコード補完してくれるとありがたいのですが、PyDevはそこまで高機能じゃないんですよね・・・
sudoはどうなる?
apacheの起動・終了等で絶対に必要になるsudo。さて、fabricではどうやるのか。どうなるのか。まずpythonのファイルに以下を書きます。
from fabric.api import sudo def httpdRestart(): sudo('/etc/init.d/httpd restart')
そして、以下で実行します。
fab -uuser -ppassword -hhost -f hoge.py httpdRestart
これで再起動できます。パスワードの対話式入力を突破してくれるので、パスワード入力で止まる事はありませんでした。これはありがたい。
bashでやるとsudo突破関数みたいの用意してやってたので、短く綺麗に書けていい感じです。
scpはどうなる?
scpではないですが、sftpによる転送ができました。
from fabric.api import put def upload(): put('/home/user/hoge.txt', '/tmp/')
こんな感じでできました。putの第1引数がlocal、第2引数がremote、です。
試しに $HOME/hoge.txt と指定してみましたが、解釈されませんでした。
この辺の環境変数等の扱いがどうなるのかはまだ調査中です。
なんでcapistranoにしなかったの?
rubyが嫌いなんだよ!!
endって書くのがキモいんだよ!!
オレオレインデントされたくないんだよ!!
というのが主な原因ですが、capistranoはfabricより重厚な作りなのも敬遠した理由の1つです。
個人的に重厚なツールは嫌いで、困った時に自力で何とかできる抜け道があるツールの方がいいと思っているので、薄い作りのfabricを選びました。
で、実践で使えそう?
使えると思います。
但し、必要なメソッドを洗い出して、環境毎・サーバ毎に挙動・設定を変えられるように、事前に設計しておかないとダメですね。これはfabricに限らずbashでもcapistranoにも言えるでしょう。
私的には、sudoが楽なだけで使いたくなっちゃいます。
後、pythonなのでbashみたいにtrapしないで単純にtry-catchできるのも嬉しい。
しかし今はbashでゴリゴリデプロイスクリプトを書く事に慣れすぎていて、習得には少し時間がかかりそうです。
結局のところfabricなんて使わなくてもbashだけでデプロイできるので、fabricを使うメリットが現れるようなコードが書けるようにならないと、使う意味は無いでしょう。