Docker環境で開発したRailsアプリをGitLabからHerokuにデプロイする方法

この記事では、ローカルの Docker コンテナで開発した Rails アプリを GitLab で構成管理し、同時に master を Heroku に自動でデプロイする環境を構築する方法を解説します。

説明が長くなったのでまとめると、

  • Ruby on Rails アプリを
  • ローカルでは Docker コンテナで開発
  • ソースは GitLab で管理
  • 本番環境は Heroku
  • GitLab に commit したら Heroku に自動的にデプロイ

します。

Docker 環境で開発した Rails アプリを GitLab から Heroku にデプロイする方法

1. GitLab にソースコードを登録する

GitLab にプロジェクトを作成します。

すでにローカルの Docker コンテナで開発している Rails アプリのソースコードがある場合は、「Push an existing folder」の手順に従ってソースを commit します。

$ cd existing_folder
$ git init
$ git remote add origin git@gitlab.com:<ユーザID>/<プロジェクト名>.git
$ git add .
$ git commit -m "Initial commit"
$ git push -u origin master

初めて commit する前に .gitignore の設定をしておくとよいでしょう。
サンプルは、検索すると色々と出てきます。

2. Heroku アプリを作成する

次に、Heroku でアプリを作成します。

「Deployment method」は、デフォルトの “Heroku Git” のままとします。

また、[Settings] – [Buildpacks] で、Ruby の Buildpack を追加します。

3. Heroku API Key を取得する

次に [Account settings] – [API Key] から API Key を生成し、コピーしておきます。

4. GitLab CI を設定する

GitLab の [Settings] – [CI/CD] – [Variables] を開き、Heroku API Key を登録します。
HEROKU_API_KEY には Step.3 で取得した API キーを、HEROKU_APPNAME には Step.2で作成したheroku側のアプリ名(例:rails-app-example)を指定します。

次に、GitLab に commit したときに CI が動くように、ルートディレクトリに下記の内容のファイル ’.gitlab-ci.yml’ を作成し、GitLab に push します。

GitLab にcommit 毎にこのスクリプトファイルが自動的に実行され、Heroku に CI されます。

image: java:8-jdk
staging:
  type: deploy
  script:
   # push to heroku server
   - git remote add heroku https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_APPNAME.git
   - git push -f heroku HEAD:master
   - echo "Deployed to staging server"
  only:
  - master

5. デプロイの動作確認をする

今回の動作確認用に適当に変更を加え、GitLab に commit してみます。

$ touch hoge.txt
$ git add hoge.txt
$ git commit -m "Testing GitLab to Heroku CI"

commit すると GitLab の CI が走ります。
CI の状況は GitLab の [CI/CD] – [Jobs] から見ることができます。

failed になった場合は、下記のコマンドで Heroku のエラーログを確認します。

$ heroku run rails console

以上が成功すれば、あとは GitLab に commit するたびに自動的に Heroku にデプロイされます。