LoginSignup
39
20

More than 5 years have passed since last update.

CapistranoデプロイをCircleCIでやってみた

Posted at

前回の記事

Rails5.1.2 + Webpacker + ReactをCapstranoでデプロイする手順書①
Rails5.1.2 + Webpacker + ReactをCapstranoでデプロイする手順書②

前書き

前回にて、RailsアプリをCapistranoでデプロイするところまでやりました。
今回は、 CircleCI を使って、Capistranoデプロイを行えるようにやってみました。

CircleCiの設定

GUI側の設定

GUI側では、CapistranoがSSHでサーバへログインするためにKeyの設定をします。

CircleCIのプロジェクトの設定から、 SSH Permissionのページへ行きます。
そこで、下記の画面になるので、 Add SSH Key から
接続先(ドメイン、またはIP)と、SSH Keyを記述して保存します。

スクリーンショット_2017-09-08_17_12_02.png

GUIの設定は以上です。
保存が完了すれば以下の画面になるので、そこの fingerprints 項目に表示されている文字列は設定ファイルで利用します。

スクリーンショット_2017-09-08_17_17_19.png

この設定で、CircleCIのDockerの中に、~/.ssh/id_rsaとして、SSH Keyが保存されるようになります。

設定ファイル

最終的に出来た設定ファイルが以下の通りです、とりあえずこれでデプロイは出来ました。


# .circleci/config.yml
version: 2
jobs:
  build:
    docker:
      - image: ruby:2.3.1-alpine
    working_directory: /home/circleci/{{アプリ名}}
    steps:
      - setup_remote_docker:
          reusable: true
      - run:
          name: システム依存関係のインストール
          command: apk add --update --no-cache linux-headers git openssh-client tar gzip build-base tzdata mariadb-dev
      - checkout
      - restore_cache:
          name: Bundleキャッシュの復元
          keys:
            - gems-{{ .Environment.CACHE_KEY }}-{{ checksum "Gemfile.lock" }}
            - gems-{{ .Environment.CACHE_KEY }}-
      - run:
          name: Ruby依存関係のインストール
          command: bundle check || bundle install --jobs=4 --retry=3
      - save_cache:
          name: Bundleキャッシュの保存
          key: gems-{{ .Environment.CACHE_KEY }}-{{ checksum "Gemfile.lock" }}
          paths:
            - /usr/local/bundle
      - add_ssh_keys:
          fingerprints:
            - {{fingerprints}}
      - deploy:
         name: Capistranoデプロイ
         command:
           bundle exec cap production deploy

解説

Environment.CACHE_KEYはこちらが独自にCircleCIのGUIで設定している環境変数になります。
特に、ハマったポイントは、システム依存関係のインストールです。
mariadb-dev(旧: mysql-dev)をシステム依存としてインストールが必要な点でした。

add_ssh_keysに先ほどのfinderprintsを指定することで、SSH Keyとして利用できるようになります。

その次のハマりポイントとして、Capistranoのconfig/deploy/production.rbの中身です。
鍵の場所を指定する際、~/.ssh/id_rsaでいけると思ったのですが、rsaの後ろにfingerprintsの:抜きの記述が必要でした。

具体的には、~/.ssh/id_rsa_aa11111111111~~ のように鍵を指定すれば、Docker上で認識され、CapistranoがサーバへSSHログイン可能になります。

これで、masterへpushすると、CircleCIで設定ファイルのタスクが実行され、最終的にCapistranoデプロイが走り、サーバへデプロイされるようになります。

サーバのスペック、アプリの大きさに左右されるかもしれませんが、大体、2分ぐらいでデプロイできました。

後書き

Capistranoデプロイを初めにやった時、CircleCI上でどうやって鍵を指定するのだろうかと、悩んでいましたが
CircleCIの設定画面を見ていると、鍵を保存する場所があったので思ったより簡単に出来ました。
これで、masterへpushするだけで、サーバ上へデプロイされるようになり、アプリ開発が捗ります。

鍵の指定の方法は、他にいい書き方があるのかもしれません。。。

39
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
20