2015年4月15日水曜日

Capistrano 3.4 を触ったのでメモ

概要

ようやくバージョン3を触ったので忘れないようにメモしておきます
インストールから簡単なレシピ作成まで実施してみました

環境

  • CentOS 6.6 64bit
  • Ruby 2.2.1
  • Gem 2.4.6
  • Capistrano 3.4.0

インストール

事前にRubyおよびGemのインストールは完了しておいてください

gem install capistrano

でインストールは完了です

初期化

cap install

適当なディレクトリに移動した上で上記のコマンドを実行しましょう
Capistranoの実行に必要なファイル群を自動で生成してくれます
Capistrano2ではcapifyというコマンドが使われていたのですが、それは使えなくなったようです

ファイル確認

cap install後に作成されるファイルは以下の通りでした

合計 12
drwxr-xr-x 3 root root 4096  4 15 20:17 2015 config
drwxr-xr-x 3 root root 4096  4 15 20:17 2015 lib
-rw-r--r-- 1 root root  837  4 15 20:17 2015 Capfile

動作確認

cap console

指定したホストに任意のコマンドを発行できるようにしてみます

  • vim Capfile
require 'capistrano/console'

上記を追記します

  • vim config/deploy/production.rb
role :web, %w{host1 host2}

host1, host2 にはアクセスしたいサーバを指定します
IPでもOKです
host1, host2 にノンパスでSSHアクセスできるのであれば設定はこれでOKです
SSHに認証がある場合は以下も実施します

  • vim config/deploy/production.rb
set :ssh_options, {
  user: 'root',
  keys: %w(/path/to/key.pem),
  forward_agent: false,
  auth_methods: %w(publickey),
  passphrase: 'password'
}

上記はユーザがrootで公開鍵/path/to/key.pemを使ってパスワードに「password」を使って認証する場合の設定です
ポートは指定していないので22番になります
また上記の設定はすべてのサーバの認証に使われる情報なので今回の場合はhost1とhost2の両方で同じ認証である必要があります

設定は以上です
では実行してみましょう

cap production console ROLES=web

とするとproduction>というプロンプトになるのでコマンドを何か実行してみましょう
role :webで指定したhost1とhost2に同じコマンドが発行されてその結果が返ってくると思います

実行時に指定しているproductionを指定しないとconfig/deploy/staging.rbというファイルが読み込まれて実行されます
Capistrano3ではマルチ環境に対応しているため、サービス環境に対して実行したい場合はproductionを付与する必要があります

対話的ではありますがcap consoleだけでもできるようになっていればかなりオペレーションがかなり簡易になると思います

レシピを作成する

せっかくなので独自のレシピも作成してみましょう

  • vim config/deploy.rb
namespace :test do

  desc 'Show hostname'
  task :show_hostname do
    on roles :web do
      execute 'hostname'
    end
  end

end

上記を最下部に追記します
タスク自体は非常に単純でロール:webに属するサーバ郡に対してhostnameコマンドを実行するだけです
追記したらタスクを実行してみます

cap -T

でタスクの一覧が確認できます

cap production test:show_hostname

でタスクを実行することができます

今回はconfig/deploy.rbにレシピを追加しましたがどうやらlib/capistrano/tasks配下に.rakeファイルを作成していくのがCapistrano3では普通のようです

最後に

Capistrano2に慣れているとだいぶ使い勝手変わっているので初めは困惑するかもしれません
タスクの書き方は基本的には変わりませんが、duplicatedになっているメソッド等もありそうなので、ドキュメントを見ながら作成したほうがいいかと思います

Tips

デフォルトで用意してあるデプロイタスクが邪魔という場合にはCapfileに記載してあるrequire 'capistrano/deploy'をコメントアウトすればOKです
ただそうするとrestartというメソッドが使えなくなるのでconfig/deploy.rbに記載してあるdeployタスクも削除しないとエラーで怒られてしまいます

0 件のコメント:

コメントを投稿