今更枯れ切ったArcherの話

Kayac

Mar 1st, 2013

profile

Recent output

Archer

deployツールにやってほしいこと

別にシェルスクリプトでも良いんだけどわかりやすく管理する

通信を厳密にやりたいんだったら、Makuosanとかある

Phase毎の処理

各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 $*

Configuration

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

設定

global:
  work_dir: /home/app/
  dest_dir: /home/app/

projects

プロジェクトとサーバー構成

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

一連の処理を記述

tasks:
  init:
    ...
  ready:
    ...
  process:
    ...
  finalize:
    ...

taskについて

init

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

ready:
  - module: Exec::Local
    name: sass
    config:
      command: "cd /home/app/proj_name && perl /home/app/proj_name/tools/setup_sass.pl --prod"

process

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

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処理は走る。

skip_defaultの処理も同時に行いたい

% deploy.sh --with=cpan

shellモード

Inspired by Capistrano