プルリクエストとReviewAppを連携させて、シームレスにCDを実現する
では実際に、サンプルのソースコードを使って、Heroku Pipelinesによるアプリケーションデプロイ&リリースを体験してみましょう。
こちらの作業を行うにはHerokuアカウントが必要になります。まだお持ちでない方は「Herokuを利用するにあたっての事前準備~サインアップおよびHeroku CLIのインストール」の手順に従って、Herokuアカウントの作成と、Heroku CLIをご準備ください。
なお、今回利用するソースコードは、GitHubで公開しているhttps://github.com/tabesfdc/delicious_recipesを利用します。ご自分の環境で試せる方は、当ソースコードをForkして、ご自分のGitHubリポジトリへコピーしてから、試していただくことをおすすめします。
今回想定しているシナリオは、次のとおりです。
- GitHub Flowで実行されることを想定して、GitHubリポジトリにはmasterではない別のブランチ名で、プルリクエストがあげられるものとします。
- このプルリクエストを受け付けて、自動的にビルドされたReview Appでテストを行います。
- GitHub側では、テストに問題がなかった場合masterブランチへマージを行います。
- Heroku Pipelines側では、masterブランチへのマージを認識して、ステージング環境へ自動的にビルドしてテストが行える状態にします。
- 最終的に、このステージング環境で問題のなかったアプリケーションは、本番環境へリリースします。
このために必要な、Heroku PipelinesとGitHub連携、Heroku CIの自動化を設定します。
Heroku Pipelinesを作成する
Heroku Pipelinesを作成する前に、「ステージング用」「プロダクション用」のHerokuアプリケーションを作成しておきます。先にHeroku Pipelinesを作成してもよいのですが、アプリケーションが準備されている方が手順が楽です。現時点では、特にアプリケーションは何もデプロイしていなくても大丈夫です。
Herokuへログインして、Herokuダッシュボードを開きます。右上に[New]ボタンがあるので、こちらをクリックして「Create new pipeline」を実行します。すると、図4の「Create New Pipeline」画面に移るので、「Pipeline Information」に識別しやすい名前をこのパイプラインに名付けます。もう一つ[Connect to GitHub]で、自分のリポジトリを検索して接続します。該当のGitHubリポジトリのプルリクエストと連携するために、このGitHub連携は必須です。
先ほど準備したアプリケーションをHeroku Pipelinesへ登録します。画面内に「STAGING」と「PRODUCTION」という箇所がありますので、そちらへ割り当てます。各々の[Add Existing App...]をクリックして、該当のHerokuアプリケーション名を入力して選択します。なんとなくお分かりいただけると思いますが、「STAGING」も「PRODUCTION」も、複数のアプリケーションを登録することができます。複数の開発を行っている場合、同時に複数のテスト環境などを準備することができ、複数の本番環境を制御できるようになっています。実際に登録してみると、図5のような画面になります。
プルリクエストとHeroku Pipelinesを連携させ、Review Appでテストを行う
次に、さきほど連携したGitHubのリポジトリでプルリクエストの要求が発生したら、自動的にReview Appがビルドされるように準備しましょう。
「REVIEW APPS」内に[Enable Review Apps]ボタンがありますので、こちらをクリックします。すると、図6の「Enable Review Apps」ウィンドウが表示されます。ここでは「Review App」として実行される際、その元となる「Config Vars」いわゆる環境変数をどの環境のものを元にするかを選択します。この画面では「staging-recipes」に割り当てたものを利用しています。「Create new review apps for new pull requests automatically」にチェックを入れます。これで、プルリクエストが要求された時に、自動的にReview Appをビルドすることができるので、この機能も利用しましょう。あとは[Enable]するだけです。これでGitHubリポジトリへのプルリクエストと連携して、自動的にReview Appを準備できます。カンタンですね。
自動的にHerou CIとデプロイを行うように設定する
2つの自動化の設定を行って、CI/CD環境を完成させましょう。
まずHeroku CIを使うようにします。Heroku Pipelinesの画面内の左上に[Settings]タブがあります。こちらのタブをクリックして表示すると、図7の設定画面になるので、ここで[Enable Heroku CI]を押して、Heroku CIを自動的に実行可能にしましょう。
二つ目の自動化は、GitHubのmasterブランチへソースコードがマージされたら、自動的にステージング環境へデプロイを行いましょう。[Pipeline]タブへ戻って、ステージング用のHerokuアプリケーションの右上にある上下矢印のボタンをクリックして、図8のプルダウンメニューから[Configure automatic deploys...]を選択します。
「Configure automatic deployment for xxxxxx」という設定画面が出てくるので、「Choose a branch to automatically deploy」のリストから、自動的にデプロイさせたいブランチを選択します。今回はmasterブランチにソースコードがプッシュ/マージされた場合を想定しているので、図9のようにmasterを選択します。Heroku CIでのテストも自動化しているので、Heroku CIのテストが通った場合にだけステージング環境へデプロイするために、「Wait for CI to pass before deploy」にもチェックを入れて[Enable Automatic Deploys]をクリックして、デプロイを自動化しましょう。
