この記事では、ローカルの 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 にデプロイされます。