wercker + Capistrano で自動デプロイ
GitHub / Bitbucket のプライベートリポジトリも無料で CI し放題の wercker というサービスがあります。(2013/11/30 現在)
サイトもきれいで素敵です。ビルド成功後、Capistrano でデプロイが自動実行される方法を書いておきます。
まず、アプリの設定で SSH 公開鍵を作成します。
生成された公開鍵は、デプロイ先サーバの ~/.ssh/authorized_keys や Bitbucket のデプロイ鍵などに追加しておきます。
次に、アプリの設定から Deploy targets の設定をします。Custom deploy を選択して、
master ブランチのビルドに成功したら、自動デプロイするようにします。
入力したら、Deploy pipeline の Add new variable をクリック。
SSH Key pair を選択し、先ほど作成した鍵を選択します。
名前の欄には、WERCKER_SSH_KEY と設定しました。
これで、デプロイ時に WERCKER_SSH_KEY_PUBLIC, WERCKER_SSH_KEY_PRIVATE という環境変数が設定されます。
OK をクリック。
あとは、wercker.yml に deploy 部分を追加して commit & push すれば、自動デプロイ環境構築完了です。
Capistrano の config/deploy.rb も、適切に設定してあるか確認しておくと良いと思います。
以下、wercker.yml の追加部分です。
deploy: steps: - script: name: make .ssh directory code: mkdir -p "$HOME/.ssh" - create-file: name: write ssh key filename: $HOME/.ssh/id_rsa overwrite: true hide-from-log: true content: $WERCKER_SSH_KEY_PRIVATE - script: name: set permissions for ssh key code: chmod 0400 $HOME/.ssh/id_rsa - cap
最後に、とある Rails アプリの wercker.yml 全体例も貼っておきます。
box: wercker/ubuntu12.04-ruby2.0.0 services: - wercker/mysql build: steps: - bundle-install - rails-database-yml - script: name: echo ruby information code: | echo "ruby version $(ruby --version) running" echo "from location $(which ruby)" echo -p "gem list: $(gem list)" - script: name: setup config files code: | cp config/resque.sample.yml config/resque.yml cp config/sunspot.sample.yml config/sunspot.yml - script: name: setup db code: bundle exec rake db:schema:load RAILS_ENV=test - script: name: rspec code: bundle exec rspec after-steps: - hipchat-notify: token: $HIPCHAT_TOKEN room-id: 357378 from-name: wercker deploy: steps: - script: name: make .ssh directory code: mkdir -p "$HOME/.ssh" - create-file: name: write ssh key filename: $HOME/.ssh/id_rsa overwrite: true hide-from-log: true content: $WERCKER_SSH_KEY_PRIVATE - script: name: set permissions for ssh key code: chmod 0400 $HOME/.ssh/id_rsa - cap after-steps: - hipchat-notify: token: $HIPCHAT_TOKEN room-id: 357378 from-name: wercker