デプロイツール Archer #0
id:tokuhirom さん作のデプロイツール Archer を最近使い始めたのですが、これがすげーいいっす。
で、この週末は更に便利に使えるように、Archer 用のプラグイン書いたりしてました。
- Archer::Plugin::SVN::Log
- Archer::Plugin::SVN::Diff
- Archer::Plugin::SVN::Update
- Archer::Plugin::Rsync
- Archer::Plugin::Shell
global: work_dir: /home/miya/work dest_dir: /home/miya/assurertasks:
init:
- module: SVN::Diff- module: Confirm config: msg: really update? [y/n] - module: SVN::Update - module: Confirm config: msg: really deploy? [y/n]process:
- module: Rsyncprojects:
Assurer:
app:
- mizzy.org
こんな感じの設定をして、
$ archer.pl Assurer -c assurer.yaml
とか実行すると、
- /home/miya/work/Assurer にある svn co したファイルと、SVN HEAD の diff を表示。
- svn up するかどうか、プロンプト表示。
- svn up 実行。
- 実際にデプロイするか、プロンプトを表示。
- ローカルの /home/miya/work/Assurer から リモートサーバ上の /home/miya/assurer へ rsync でファイルコピー。
といった動作になります。
Archer 同梱の config.yaml では、svn log, svn up, rsync は Exec::Local プラグインで実行しているのですが、この辺りの記述をできるだけ簡略化したいな、ということで、こういったプラグインをつくってみました。
また、ライブドアテクノロジーセミナーの naoya さんのプレゼン で、Capistrano にはシェルプロンプトを表示して、指定したコマンドを複数のリモートサーバ上で一発で実行できる、という機能があって、これがうらやましかったので、Archer プラグインとして実装してみました。
tasks:
init:
- module: Shell
config:
role: app
para: 1
projects:
mizzy.org:
app:
- www.mizzy.org
- svn.mizzy.org
- ftp.mizzy.org
といった設定をしやると、以下の様な感じで実行できます。(3つのサーバは実体が同じなので、結果が同じですが。)
$ ./archer.pl -c shell.yaml mizzy.org [info] run hook init [debug] load Archer::Plugin::Shell [info] run Archer::Plugin::Shell shell> uptime [www.mizzy.org] 02:59:34 up 4 days, 3:39, 1 user, load average: 0.21, 0.23, 0.22 [svn.mizzy.org] 02:59:34 up 4 days, 3:39, 1 user, load average: 0.21, 0.23, 0.22 [ftp.mizzy.org] 02:59:34 up 4 days, 3:39, 1 user, load average: 0.21, 0.23, 0.22 shell>
Archer はこちらから 入手できます。また、俺が書いたプラグインなんかは、 ここに置いてあります 。