文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

【python】fabricを触ってみた!【デプロイツール】

sudoできたり結構良いツールなのですよ〜


f:id:treeapps:20180424130724p:plain

最近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を使うメリットが現れるようなコードが書けるようにならないと、使う意味は無いでしょう。