記事の目的
- 備忘
環境
- Django
- localhostではsqlite
- herokuではpostgres
- Python3
- Heroku
- Production appのみ
- dynoとpostgresのみ有料
- Production appのみ
- DjangoのWebアプリケーションは個人で実装・運用しています。
Before
- ソースコードのホスト
- Bitbucket(当時はGithubのPrivateが有料でした)
- Productionアプリケーションのリリース(アップデート)
$ git push heroku master
After
Heroku Pipelineを使ってみたいとは思いつつもBitbucketだからなぁという思いから停滞していましたが、やってみて良かった。
-
ソースコードのホスト
- GitHub
-
Productionアプリケーションのリリース(アップデート)
-
アプリケーションのテスト(Staging)
- Review(masterへのPR)を受けてGit HubのmasterへマージするとStagingアプリが自動Deployされる
- 自動DeployされたStaging Appでテスト
-
レビュー(Review)
- Heroku PipelineによりGithubのmasterにPull Requestをすると、Pull RequestをトリガーにStaging AppのHeroku:Addon、Staging AppのConfig Vars(環境変数)を参照し自動DeployされるReview Appsによりレビュー
Afterまでの手順
- GithubにソースをPushしておく
- Herokuで新たにStaging用のAppを新規作成する
- (Review AppsはHeroku Pipelineにより自動で作成されるため、手動で作成する必要なし)
- Heroku:Pipelineを新規作成する。
- 画面遷移含めてQiita(Web)上に分かりやすい情報が大量あるのでそちらを参照。
- 今回はProduction AppのリリースはHeroku PipelineのPromote to productionボタン押下で実行する事とし、Staging AppをGitHubの該当ブランチのmasterと同期。
- Review AppはStaging AppをParent Appとし、Githubの該当ブランチのmasterにPull Requestをすると自動でDeployされるようにします。
- Review appsの設定時にReview appsの振る舞いを決定するapp.jsonをHerokuが作成し、GithubのmasterにPushするので、ローカルの開発環境でfetch/mergeを忘れずに実施。
- Githubに新たなbranchを作成し、変更をPushする。
- Github上でmasterに対するPull Reuqestを作成する。
- Review Appが自動でDeployされる。
- 問題がなければ、Github上で該当のPull Requestをmergeする。
- masterの更新に伴いStaging Appが自動でDeployされる。
- Staging Appの動作に問題がなければ、Heroku:Pipeline上でPromote to productionボタンを押下し、Productionにリリースする。
Pipeline作成時に気にした事・分かった事
- Staging App、Review Appはdyno、postgresのプラン制約をケアすれば無料でイケる。
- Production Appが有料dyno、有料Addonだったのでミラーリングかと誤解していた。
- ミラーリングは出来るが本アプリの場合、用途として不要なのでやらない。
- (考えれば当然だったが)Staging App、Review Appは振る舞いを意識しないと個別のpostgresエンドポイントを生成する。(After絵の通り)
- Review AppはParent App(Staging App)のAddonをコピーする(設定に出来る)
- Promote to productionではスラグのコピーのみでdbのmigrateは別途実施する必要がある。
- Promote to productionした後に、
$ heroku run python manage.py migrate
が必要になる。
- Promote to productionした後に、
以上