Heroku Tips(4) Gitlabで自動デプロイ

January 21, 2019 Naoki Kitaarashi

皆さん、こんにちは。アピリオ北嵐です。皆さんは、Herokuで開発を行う際にコード管理とサーバーへのデプロイをどのように実施していますか? Herokuはgitの仕組みを使ってサーバーへのデプロイを管理します(Heroku Git)。小規模な開発やサンプルアプリ程度であれば、Herokuが提供するこのHeroku Gitの仕組みをそのまま使うこともできますが、複数のプログラマーによるチーム開発となると、Heroku Gitでは効率的に作業できないものです。

HerokuはGithubと連携する仕組みを公式にサポートしていますので、Githubが使えるプロジェクトではGithub連携を使えば良いのですが、コストの関係でGithubを使えないプロジェクトも多いと思います。私が参画したプロジェクトもそうでした。そうしたケースで使えるのが、Githubに近い機能を無償で提供しているGitLabです(2018年11月時点)。GitLabのサイトでは、Githubのプルリクエストと同等なマージリクエストによるブランチ間のマージ など、Gitによるエンタープライズ開発に必要な機能を一通り提供しています。また、GitLab CI (Continuous Integration)によるビルドやリリースの自動化もサポートしています。このGitLab CIの仕組みを利用して、masterブランチへのコミット時に自動的にHerokuサーバーにデプロイすることが可能です。今回はこの自動デプロイの設定方法について、ご紹介したいと思います。

1. GitLabにプロジェクト作成

GitLabにアカウントを持っていない方はまずアカウントを登録して下さい(必要なのはメールアドレスだけです)。それから、ソースコードを管理するプロジェクトを作成します。

2. Herokuアプリのソースコードを登録

Herokuアプリケーションのソースコードを1で作成したプロジェクトに登録します。フォルダ構造とファイルはHeroku Gitにデプロイするものと完全に同じにして下さい。

 

[Java/gradle設定のプロジェクトの例]

3. Heroku API Keyの取得

Heroku Git に明示的にログインすることなしにアクセスするために、ユーザーごとに発行されるAPI KEYを取得します。

・Herokuサイトにログインして、アカウント設定を開きます。

 

・画面を下にスクロールして「API Key」を表示します。[Reveal]ボタンを押すとログインユーザーに紐付いたAPI Keyが表示されます。

 

4. Herokuアプリの作成

Heroku上にデプロイ先のアプリを作成します。この例ではアプリ名は techblog-herokuです。
 

5. GitLab CIの設定

GitLab によるCIを実現するために、ルートディレクトリにファイル ’.gitlab-ci.yml’ を作成して、yml形式でオペレーションを定義して下さい。コミット毎にこのスクリプトファイルが自動的に実行され、CIが実現できます。下記のスクリプトでは、Heroku git サーバーをリモートとして登録し、GitLab上のファイルをpushします。
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 master
   - echo "Deployed to staging server"
  only:
  - master

上記の$HEROKU_API_KEY と $HEROKU_APPNAME は変数になり、[Settings] - [CI/CD] - [Variables] でセットします。HEROKU_API_KEYには手順3で取得したAPIキーを、HEROKU_APPNAMEには4で作成したheroku側のアプリ名(例:techblog-heroku)を指定して下さい。

./gitlab-ci.yml ファイルをmasterにコミットすると、このymlファイルに定義された処理が早速実行されます。注意して欲しいのは、このスクリプトでは、リモートサーバーとしてheroku gitサーバーを登録し、強制的にpush( -f オプションを指定)しているため、GitLab 側からデプロイしていない変更は上書きされます。

6. デプロイの確認

GitLab CIによる自動デプロイの実行は、[CI/CD] - [Jobs] から確認します。
 
実行開始段階では”running"状態になります。ステータス"running"をクリックするとコンソールが開き、下記のような詳細なログが確認できます。
 
上記は実行に失敗した状態で、認証エラーにより Heroku gitサーバーへのデプロイに失敗したことが分かります。
 
API KEYを更新して再度コミットします。
 
 
今度は成功してステータスが "passed" になりました。これで、heroku側にもmasterブランチの最新のコードがデプロイされています。
 

まとめ

複数の開発者でherokuアプリをチーム開発するのであれば、GithubやGitLabといったエンタープライズな開発ツールを使って効率的にgitによる開発を行うことをお勧めします。こうしたツールを使うのであれば、面倒かつミスの起こりやすい手作業によるサーバーへのデプロイは避け、できるだけ自動化したいものです。今回ご紹介したGitLab CIを使う方法は設定自体は難しくなく、日々の開発作業で便利さを実感できると思います。GitLabをツールとして利用される場合は、是非ともご活用下さい!!
 

著者について

某大手SIベンダーを退職し2015年からアピリオの一員としてクラウドの世界に身を投じているシニアエンジニアです。プロジェクトでの立場に応じて、アーキテクト、リーダー、デベロッパーと様々なロールの仕事に携わっています。1人のエンジニアとして技術の最先端に居続けることが技術者としてのこだわりです (^o^) やはりクラウドの世界は面白い!

Naoki Kitaarashi のコンテンツをもっと見る
戻る
Heroku Tips (5) Heroku Connect
Heroku Tips (5) Heroku Connect

5回目となる今回は Heroku Connect を取り上げてみたいと思います。Heroku Connect はその名前にあるように Salesforce と Heroku 間のデータを”コネクト”つまり同期するア...

次へ
Heroku Tips (1) Heroku Postgresを参照する
Heroku Tips (1) Heroku Postgresを参照する

Salesforce の Heroku Postgresを参照するいくつかの方法について紹介します。

アピリオまでお気軽にお問合せください

ご質問はこちら