Heroku Github PullRequest Deploy の巻
こんにちは、浅野です。
今回は、PublicBetaで復活した Github PullRequest Deployの紹介です。
簡単に3行で
- GithubのPullRequestに同期して自動的にHerokuアプリが作られます
- 設定が必要なapp.jsonを母体アプリから生成するウィザードが用意されました
- 親アプリの環境変数の値コピーができるようになりました
実際に設定を行って使ってみた手順、は次回のポストで紹介します。
Github PullRequest Deploy とは
Herokuアプリケーションと同期させたGithubリポジトリへプルリクエストが送られた時に、 そのプルリクエストの内容のHerokuアプリケーションが自動的に作られる仕組みで、下記のような特徴があります。
- HerokuアプリケーションはPullRequest単位で自動的に作られます(親アプリ名が
hoge
だった場合、#1のPullRequestで作られるアプリ名はhoge-pr-1
) - そのHerokuアプリケーションのライフサイクルはPullRequestのライフサイクルと自動で同期します。
- PullRequestが作られた時にHerokuアプリケーションも作られます
- PullRequestが更新された時(コードが追加でPushされた時)にHerokuアプリケーションも更新されます
- PullReqeustがマージされた時にHerokuアプリケーションも消滅します
何が嬉しいの?
- PullRequestの変更点を確認する時に、動く環境を作るのが省力化できます
- これまでは自分でブランチをチェックアウトして、ローカルで動かすとか・Herokuにデプロイ、などの対応だった
- 動的テスト(Seleniumを使ったWebUIテスト、Vaddyのような脆弱性スキャン、お客様側の受け入れテスト)を実行しやすくなる
app.jsonの生成ウィザード
PullRequestDeployを使用するには、リポジトリ直下に app.json
を置く必要があります。
このapp.jsonは、規模の大きなアプリになればなるほど後から作るのが面倒になります。(使用するaddonの数が増えたり、環境変数の数が増えたり)
このウィザードを使用すると、母体アプリケーションで定義されている内容からアドオン・環境変数の項目が設定済みの app.json の雛形が作られ、それをカスタマイズした後にgithubリポジトリへコミットまでを行うことができます。
親アプリの環境変数の値コピー
親となるHerokuアプリケーションの環境変数の値を、PullRequestごとに生成される子Herokuアプリ―ケーションでコピーできるようになりました。 これによって、コード管理したくない秘匿情報(DBの接続情報、何らかのサービスのAPIキー等)を子Herokuアプリケーションに引き渡す事ができます。
例えば、開発環境で子HerokuアプリケーションともDBを共有するようにできるようになるので、 developブランチの内容をデプロイした親Herokuアプリケーションで、特定のデータの組み合わせで発生するバグが そのバグ修正を実施したPullRequestのブランチをデプロイした子Herokuアプリケーションで解消されている、が簡単に確認できるようになります。
app.jsonの書き方
親Herokuアプリケーションから値をコピーしたい環境変数 INHERIT_THIS_CONFIG_VAR
をapp.jsonの "env"
で以下のように定義します。
これで親Herokuアプリケーションで定義されている値をそのまま利用できるようになります。
"env": { "INHERIT_THIS_CONFIG_VAR": { "required": true } }
次回ポストでは、これらを実際に設定して使ってみた手順をご紹介いたします。