コードがデプロイされるまでの流れ

このドキュメントは英語版のドキュメントを日本語に翻訳したものです。原文に修正があった場合は随時反映致しますが、翻訳作業が完了するまでは英語版が最新の可能性がございます。


一般的な概要

コードのデプロイに必要なコンポーネントは 2 つあります。

  • クライアント側コンポーネント。このコンポーネントは、環境のアプリケーション マスターに接続し (SSH 経由)、正しいバージョンのサーバー側コンポーネントがインストールされていることを確認します。次に、クライアント側コンポーネントがサーバー側コンポーネントをアプリケーション マスターで起動し、コード デプロイを調整します。
  • サーバー側コンポーネント。このコンポーネントは、環境内のその他すべてのインスタンスにインストールされていることを確認します。次に、サーバー側コンポーネントが、クライアント側コンポーネントがデプロイを要求するたびに、コードのデプロイ プロセスを管理・調整します。

1. コード フェッチ

  • アプリケーション マスターでは、ソース コードが git リポジトリでフェッチされ、選択したブランチが /data/<appname>/shared/cached-copy にチェックアウトされます。次に、アプリケーション マスターがそのソースコードを環境内のその他すべてのインスタンスに (rsync を使用して) コピーします。
  • 各インスタンスで、/data/<appname>/shared/cached-copy のコンテンツが /data/<appname>/releases/<timestamp> にコピーされます。

2. Gem バンドル

コードを環境のインスタンスすべてにコピーしたら、サーバー側コンポーネントによって Gemfile があるかどうかが確認されます。

  • Gemfile が見つかった場合は、Bundler gem がインストールされ、bundle install コマンドが各アプリケーション インスタンスで実行されます。
  • 特定バージョンの Bundler が必要な場合は、Gemfile で指定してください。
  • デプロイ環境での整合性を確保するために Gemfile.lock の生成をお勧めします。

3. 既定の設定

アプリケーションの gem がインストールされたら、サーバー側コンポーネントがアプリケーションの設定ファイルとディレクトリを生成し、シンボリックリンクを作成します。

  • アプリケーションに必要な設定ファイルとディレクトリは、生成されるかまたはシンボリックリンクが作成されて配置されます。このようなファイルには、config/database.ymlconfig/mongrel_cluster.ymlconfig/newrelic.ymllog ディレクトリなどがあります。

4. データベースのマイグレーション

既定の設定がセットアップされると、適切なデプロイ フックを使用してデータベースのマイグレーションが実行されます。

  • デプロイ フック deploy/before_migrate.rb が実行されます。
  • アプリケーションに固有の移行コマンドが実行されます (--migrate オプションを参照してください)。
  • 最後に、デプロイ フック deploy/after_migrate.rb が実行されます。

移行とデプロイ フックが実行されると、アプリケーション のシンボリックリンクが作成されます。

  • デプロイ フック deploy/before_symlink.rb が実行されます。
  • アプリケーションのシンボリックリンクが作成されます。
    /data/<appname>/current は次をポイントします。/data/<appname>/releases/<timestamp>
  • 最後に、デプロイ フック deploy/after_symlink.rb が実行されます。

6. アプリケーション サーバーの再起動

アプリケーション コードを配置してシンボリックリンクが適切に作成されたら、アプリケーション サーバーを再起動します。

  • デプロイ フック deploy/before_restart.rb が実行されます。
  • 環境のアプリケーション サーバーが再起動されます。たとえば、環境に Passenger を使用している場合、サーバー側コンポーネントが Passenger に再起動を要求するために /data/<appname>/current/tmp/restart.txt ファイルをタッチします。
  • 最後に、デプロイ フック deploy/after_restart.rb が実行されます。

7. 最後のクリーンアップ

/data/<appname>/releases に以前のリリースが 4 つ以上ある場合は、新しい 3 つのリリース以外はすべて削除されます。これでデプロイは完了です。


このページに関してフィードバックやご質問がございましたら、以下にコメントを入力してください。サポートが必要な場合は、Engine Yard サポートにチケットを送信してください。

コメント

サインインしてコメントを残してください。

Powered by Zendesk