やりたいこと
- 自動テストがパスし、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キーの秘密鍵を登録する.
CircleCIに環境変数を設定
BBUILD SETTINGS > Environment Variables からCapistranoの設定ファイル内で参照している環境変数を登録する.
SERVICE_NAME_PRODUCTION_SSH_KEY
には ~/.ssh/id_rsa
を設定する.
add_ssh_keys
deploy step に fingerprints の読み込みを記述する.
circleci/config.yml
- add_ssh_keys:
fingerprints:
- "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"