別にシェルスクリプトでも良いんだけどわかりやすく管理する
通信を厳密にやりたいんだったら、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