Rails
capistrano
CircleCI

CircleCIからCapistranoデプロイを実行する

やりたいこと

  • 自動テストがパスし、masterブランチだった場合は自動でデプロイを実行する

前提条件

  • Ruby 2.4.0
  • Rails 5.1.4
  • Capistrano 3
  • CircleCI 2

Capistranoの設定

設定自体は様々な記事で解説されているので他に譲るが,
デプロイ先のIPアドレスやSSHのパス指定は,環境変数で管理するようにした.

config/deploy/production.rb
server ENV['SERVICE_NAME_PRODUCTION_IP'], port: 22, roles: [:app, :web, :db], primary: true

set :ssh_options, {
    forward_agent: true,
    user: fetch(:user),
    keys: ["#{ENV['SERVICE_NAME_PRODUCTION_SSH_KEY']}"]
}

ローカル環境からコマンドでデプロイできるようになる.

$ bundle exec cap production deploy

CircleCI向けの設定

デプロイ用のSSHの秘密鍵をCircleCIに設定

PERMISSIONS > SSH Permissions からデプロイで使用しているSSHキーの秘密鍵を登録する.

image.png

CircleCIに環境変数を設定

BBUILD SETTINGS > Environment Variables からCapistranoの設定ファイル内で参照している環境変数を登録する.
SERVICE_NAME_PRODUCTION_SSH_KEY には ~/.ssh/id_rsa を設定する.

image.png