Yak shaving logs


My life is just yak shaving.

さくらPVSで動かしているRailsアプリのデプロイをCircleCI x capistrano で自動化する

2017/06/12 #rails #capistrano #さくらPVS #circleci

By Yusuke Takita


こんにちは。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 というメニューがあるのでそのメニューに遷移します。

https://gyazo.com/49ccc6c5c402eeef9cfa669c9de031eb

あとは Add SSH Key をクリックして秘密鍵を登録すればOKです。

https://gyazo.com/587d33ec511aed86a10b081d66308134

これで master に push や merge をすれば自動でデプロイできるようになりました。

このエントリーをはてなブックマークに追加

categories


最新記事


tags