別にシェルスクリプトでも良いんだけどわかりやすく管理する
通信を厳密にやりたいんだったら、Makuosanとかある
各Phaseにtaskを割り当てる
% archer --para=8 --config=/path/to/deploy.yml proj_name
実際はコレをシェル化してdeploy.shとか名前つけてる
#!/bin/sh archer --para=8 --config=/path/to/deploy.yml proj_name $*
global: work_dir: /home/app/ dest_dir: /home/app/ tasks: init: - module: Confirm name: confirm config: msg: 'deploy ok? [y/n] ' process: - module: Rsync name: rsync config: verbose: 1 update: 0 - module: Exec::Remote name: restart role: app config: command: | sudo svc -h /service/proj_name.plack sudo svc -t /service/proj_name.worker finalize: - module: Exec::Local name: irc config: command: "/home/app/proj_name/launch perl deploy/script/post_deploy_hook.pl" projects: proj_name: app: - proj_name-app01 - proj_name-app02 - proj_name-app03 - proj_name-app04 web: - proj_name-web01 - proj_name-web02 batch: - proj_name-batch01
設定
global: work_dir: /home/app/ dest_dir: /home/app/
プロジェクトとサーバー構成
projects: proj_name: app: - proj_name-app01 - proj_name-app02 - proj_name-app03 - proj_name-app04 web: - proj_name-web01 - proj_name-web02 batch: - proj_name-batch01
一連の処理を記述
tasks: init: ... ready: ... process: ... finalize: ...
init: - module: Exec::Local name: dbcheck config: command: "/home/app/proj_name/launch perl deploy/script/check_db_version.pl" validate: 1 - module: Exec::Local name: cpanm_installdeps config: command: "/home/app/proj_name/launch cpanm --installdeps ." validate: 1 - module: Confirm name: confirm config: msg: 'deploy ok? [y/n] '
ready: - module: Exec::Local name: sass config: command: "cd /home/app/proj_name && perl /home/app/proj_name/tools/setup_sass.pl --prod"
process: - module: Rsync name: cpan skip_default: 1 role: - app - batch config: source: "/home/app/perl5" - module: Rsync name: rsync config: exclude: - .git/ - module: Exec::Remote name: restart role: app config: command: | sudo svc -h /service/proj_name.plack sudo svc -t /service/proj_name.worker
finalize: - module: Exec::Local name: irc config: command: "/home/app/proj_name/launch perl deploy/script/post_deploy_hook.pl"
% deploy.sh --skip=restart
% deploy.sh --only=cpan
init処理は走る。
% deploy.sh --with=cpan
Inspired by Capistrano