実業務にFabricを導入する

Mac OS X(Marvericks)にFabricをインストールする方法で書いた通り、許可が出たので、早速業務に導入した。

デプロイ作業 Jenkins->Fabric

まずはデプロイ作業をFabricに。

from fabric.api import env, run

def develop():
  env.hosts = ['srv1']

def deploy(target="master"):
  run('sudo -i -u user_name')
  run('mv /apps/service_name/repos /apps/service_name/repos_backup_fabric')
  run('/apps/service_name/scripts/rollout.sh %s' % target)
$ fab develop deploy
[srv1] Executing task 'deploy'
[srv1] run: sudo -i -u user_name
[srv1] out: [user_name@srv1 ~]$ 

ん? 次の行のコマンドが実行されないぞ? どうやら入力待ちになっている模様。ちなみにAdmineユーザーのパスワードは教えてもらえないので、以下のようにはできない。

from fabric.api import env, run, sudo

def develop():
  env.user = 'user_name'
  env.hosts = ['srv1']

def deploy(target="master"):
  sudo('mv /apps/service_name/repos /apps/service_name/repos_backup_fabric')
  sudo('/apps/service_name/scripts/rollout.sh %s' % target)

これって、How to implement “sudo su -” call? · Issue #1013 · fabric/fabricで対応入らないとできないのかな? う〜ん、残念。

できる方法を教えてもらった 2015/4/13追記

以下のように変えたらできた。コマンドを指定していないからうまく行っていなかったとのこと。

from fabric.api import env, run

def develop():
  env.hosts = ['srv1']

def deploy(target="master"):
  run("sudo -i -u user_name mv /apps/service_name/repos /apps/service_name/repos_backup_fabric")
  run("sudo -i -u user_name /apps/service_name/scripts/rollout.sh %s" % target)

デプロイ以外にタグ付けの部分もできた。メール通知だけはできていないが、これでSPOFを避けられるようになった。