Help us understand the problem. What is going on with this article?

git push heroku masterからの卒業(Herokuパイプラインへ)

記事の目的

  • 備忘

環境

  • Django
    • localhostではsqlite
    • herokuではpostgres
  • Python3
  • Heroku
    • Production appのみ
      • dynoとpostgresのみ有料
  • DjangoのWebアプリケーションは個人で実装・運用しています。

Before

  • ソースコードのホスト
    • Bitbucket(当時はGithubのPrivateが有料でした)
  • Productionアプリケーションのリリース(アップデート)
$ git push heroku master
  • アプリケーションのテスト(Staging)

    • 開発環境(ローカル)でpython manage.py runserverをし、localhostでテスト
  • Qiita.png

After

  • Heroku Pipelineを使ってみたいとは思いつつもBitbucketだからなぁという思いから停滞していましたが、やってみて良かった。

  • ソースコードのホスト

    • GitHub
  • Productionアプリケーションのリリース(アップデート)

    • Heroku PipelineのPromote to productionボタンクリック
    • スクリーンショット 2019-09-12 11.06.47.png
  • アプリケーションのテスト(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によりレビュー
  • Qiita (1).png

Afterまでの手順

  1. GithubにソースをPushしておく
  2. Herokuで新たにStaging用のAppを新規作成する
    • (Review AppsはHeroku Pipelineにより自動で作成されるため、手動で作成する必要なし)
  3. 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されるようにします。
  4. Review appsの設定時にReview appsの振る舞いを決定するapp.jsonをHerokuが作成し、GithubのmasterにPushするので、ローカルの開発環境でfetch/mergeを忘れずに実施。
  5. Githubに新たなbranchを作成し、変更をPushする。
  6. Github上でmasterに対するPull Reuqestを作成する。
  7. Review Appが自動でDeployされる。
  8. 問題がなければ、Github上で該当のPull Requestをmergeする。
  9. masterの更新に伴いStaging Appが自動でDeployされる。
  10. 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が必要になる。

以上

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away