こんにちは。Takitaです。
デプロイするときはいつもmasterにソースをpushしてから $ bundle exec cap production deploy
を実行していましたが、
それもだるなあということでCircleCIで(今はない)テストが通った後にcapistranoのコマンドを実行させるようにしました。
この記事ではcapistranoでデプロイできることを前提としているため、capistranoの設定等については触れません。
まずはプロジェクトのルートディレクトリに circle.yml
を作成して以下のように設定を追加します。
machine:
timezone:
Asia/Tokyo
ruby:
version: 2.4.1
test:
override:
- 'true' # testがない場合は「no test」というステータスでビルドが失敗するため追加しています。
# 参考:https://stackoverflow.com/questions/35304343/circleci-with-no-tests
deployment:
production:
branch: master # 対象とするbranch
commands:
- bundle exec cap production deploy
capistranoはsshでサーバーにログインしてデブロイを実行するため、
次はCircleCIからサーバーにsshできるようにサーバーの秘密鍵をCircleCIに登録します。
(あまり秘密鍵はどこかに登録したくはありませんが・・・)
ちなみに秘密鍵を登録しない状態でビルドすると以下のようなエラーになります。
$ bundle exec cap production deploy
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as user@server_name: Authentication failed for user user@server_name
Net::SSH::AuthenticationFailed: Authentication failed for user user@server_name
Tasks: TOP => rbenv:validate
(See full trace by running task with --trace)
bundle exec cap production deploy returned exit code 1
Action failed: bundle exec cap production deploy
まずプロジェクトの設定ページにいきます。
https://circleci.com/gh/user_name/app_name/edit
左カラムに SSH Permissions というメニューがあるのでそのメニューに遷移します。
あとは Add SSH Key をクリックして秘密鍵を登録すればOKです。
これで master に push や merge をすれば自動でデプロイできるようになりました。