Symfoware

Symfowareについての考察blog

Python Fabricで、リモートサーバーでの作業を自動化する

sshでリモートサーバーにログイン。
gitコマンドを実行して、最新のソースを取得しプログラムを最新化する。

・・・という作業をwebサーバー分実行するのは面倒なので、
何か良い方法はないか調べてみました。


Fabric



Python製のツールです。
Fabric

インストール方法はこちら。
http://www.fabfile.org/installing.html

pip,easy_install,aptなどから選択できます。

今回はUbuntu 14.04にaptでインストールしました。


$ sudo apt-get install fabric




サンプルを実行してみます。

fabfile.pyというファイル(名前が重要)を作成し、以下のプログラムを記載。


  1. # -*- coding:utf-8 -*-
  2. from fabric.api import run
  3. def host_type():
  4.     run('uname -s')





コンソールで、ファイルを作成したディレクトリに移動。
192.168.1.101にrootで接続し、fabfileのhost_typeメソッドを実行します。


$ fab -u root -H 192.168.1.101 host_type




実行してみると、パスワードの入力を求められますので、192.168.1.101のrootパスワードを入力。


$ fab -u root -H 192.168.1.101 host_type
[192.168.1.101] Executing task 'host_type'
[192.168.1.101] run: uname -s
[192.168.1.101] Login password for 'root':
[192.168.1.101] out: Linux
[192.168.1.101] out:

Done.
Disconnecting from 192.168.1.101... done.




「Linux」という出力が得られました。


基本的な使い方はこれだけです。








gitのpullを実行



こちらのドキュメントを見ながらプログラムを書いてみます。
http://docs.fabfile.org/

webサーバーにログイン。
git pullを実行してみます。
また、gitがインストールされていない場合はインストールします。


git等のツールのインストールチェックには、cuisineを使うと便利とのことなので、
インストールしておきます。
https://github.com/sebastien/cuisine


$ sudo easy_install cuisine




Chefに挫折したあなたへ。Fabricのすすめ

デプロイツールfabric+cuisineで冪等性保証

上記を参考に試行錯誤しながら作成したプログラムがこちら。


  1. # -*- coding:utf-8 -*-
  2. import fabric.api
  3. import cuisine
  4. # パッケージの取得はaptを選択
  5. cuisine.select_package('apt')
  6. def deploy():
  7.     
  8.     # gitコマンドの確認
  9.     with cuisine.mode_sudo():
  10.         cuisine.package_ensure('git')
  11.     
  12.     # /var/www/ci_testにgitからソースを取得
  13.     dist_dir = '/var/www/ci_test'
  14.     
  15.     # ディレクトリが存在しない場合はclone
  16.     if not cuisine.dir_exists(dist_dir):
  17.         fabric.api.sudo('git clone http://192.168.1.102:8080/gitbucket/git/root/test.git ' + dist_dir)
  18.         return
  19.     
  20.     # ディレクトリが存在する場合はpull
  21.     with fabric.api.cd(dist_dir):
  22.         fabric.api.sudo('git pull')




gitで/var/www/ci_testにcloneまたはpullする仕組みです。


別のホストから実行してみます。


$ fab -u symfo -p P@ssw0rd -H 192.168.1.101 deploy




見事、gitのインストールとcloneが出来ました。





ホスト名、ユーザー名、パスワードをプログラムで設定



コマンドの引数に毎回ホスト名を指定するのが面倒な場合は、
envに設定することができます。


  1. # -*- coding:utf-8 -*-
  2. import fabric.api
  3. import cuisine
  4. # パッケージの取得はaptを選択
  5. cuisine.select_package('apt')
  6. # 実行するホスト名
  7. fabric.api.env.hosts = ['192.168.1.101']
  8. # 接続時のユーザー
  9. fabric.api.env.user = 'symfo'
  10. # パスワード
  11. fabric.api.env.password = 'P@ssw0rd'
  12. # 複数指定する場合 ユーザーは複数指定できない模様
  13. # fabric.api.env.passwords = {'symfo@192.168.1.101:22' : 'P@ssw0rd'}
  14. def deploy():
  15.     
  16.     # gitコマンドの確認
  17.     with cuisine.mode_sudo():
  18.         cuisine.package_ensure('git')
  19.     
  20.     # /var/www/ci_testにgitからソースを取得
  21.     dist_dir = '/var/www/ci_test'
  22.     
  23.     # ディレクトリが存在しない場合はclone
  24.     if not cuisine.dir_exists(dist_dir):
  25.         fabric.api.sudo('git clone http://192.168.1.102:8080/gitbucket/git/root/test.git ' + dist_dir)
  26.         return
  27.     
  28.     # ディレクトリが存在する場合はpull
  29.     with fabric.api.cd(dist_dir):
  30.         fabric.api.sudo('git pull')




これで、


$ fab deploy



とするだけで実行できるようになりました。






任意のソースファイルを実行する



fabfile.pyというファイル名以外を使用したい場合は、
-f オプションでファイルのパスを指定します。


$ fab -f /home/baranche/dev/python/other.py deploy





だいぶ使い方がわかってきました。







【参考URL】

Chefに挫折したあなたへ。Fabricのすすめ

デプロイツールfabric+cuisineで冪等性保証
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/02/21(土) 16:49:52|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Jenkins + GitBucket + Fabricを使用し、ボタンひとつでwebサーバーにデプロイ | ホーム | Debian 7 ユーザーの追加とsudoでの実行許可>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1635-4f53dacc
この記事にトラックバックする(FC2ブログユーザー)