リリースフェーズによる ToDo の実行
学習の目的
この単元を完了すると、次のことができるようになります。
- リリースフェーズタスクの設定方法を説明する。
- リリースに関連する活動とログの確認方法を説明する。
リリースフェーズを使用する
必要に応じてリリースフェーズを使用すると、リリースが本番にリリースされる前にタスクを実行できます。
ユースケース
このフェーズでよく実行されるタスクとして次のようなものがあります。
- CSS、JS、その他のアセットをコンテンツ配信ネットワーク (CDN) または AWS S3 バケットに送信する。
- キャッシュストアを準備または無効化する。
- データベーススキーマの移行を実行する。
リリースフェーズタスクを指定する
アプリケーションでリリースプロセスを使用し、one-off dyno でリリースフェーズタスクを実行できます。タスクを指定するには、アプリケーションの Procfile に追加します。release
プロセスタイプと実行するコマンドをファイルに追加します。
たとえば、Django app の場合、次のようにデータベース移行をファイルに指定します。
release: python manage.py migrate
Docker イメージを Heroku にリリースする場合、詳細はリリースフェーズを Container Registry で使用する方法を参照してください。
リリースフェーズ実行のタイミング
リリースフェーズタスクは、リリースがアドオンの設定変数への変更によって生じた場合を除き、各新規リリースで実行されます。次のすべてのイベントでリリースが作成されます。
- 成功したアプリケーションのビルド
- 設定変数値の変更
- パイプライン昇格
- ロールバック
- プラットフォーム API 経由のリリース
- 新規アドオンのプロビジョニング
リリースフェーズが正常に終了するまで、アプリケーション dyno が新規リリースに対して開始することはありません。リリースフェーズタスクが失敗すると、新規リリースはリリースされません。
リリースをロールバックする
バグのあるコードを本番にリリースした場合、git revert
を使用して関連するコード変更をローカルで元に戻し、再リリースします。
誤設定やその他の Heroku プラットフォーム固有の問題でリリースのロールバックが必要な場合は、heroku rollback
コマンドを使用します。次のコマンドでは、アプリケーションが前の v40 リリースにロールバックされます。
heroku rollback v40 Rolled back to v40
リリース番号を指定しないと、アプリケーションは 1 リリースだけロールバックされます。
heroku rollback
コマンドで新規リリースが作成されます。このリリースはコンパイルされたスラッグとロールバック先リリースの設定変数をコピーします。
リリース状況を確認する
リリースの状況 (リリースが失敗したり、リリースフェーズの長時間実行が原因で保留になったりした場合を含む) を確認するには、heroku releases
を実行します。
heroku releases === example-app Releases - Current: v52 v53 Deploy ad7c527 release command failed example@heroku.com v52 Deploy b41eb7c example@heroku.com v51 Deploy 38352d3 example@heroku.com
heroku releases:output
コマンドを使用して特定のリリースフェーズ実行の出力を確認します。
heroku releases:output v40 --- Migrating db --- INFO [alembic.runtime.migration] Context impl PostgresqlImpl. INFO [alembic.runtime.migration] Will assume transactional DDL.
リリースログを確認する
アプリケーションの [Activity (活動)] タブからリリースに関連付けられたログにアクセスします。表示するリリースの横にある [View release log (リリースログの表示)] をクリックします。
リソース