2016-04-02 6 views
1

私たちは、ベンダーのディレクトリが現在GITは無視されますが、我々は他の場所でGITに重要な依存関係を犯したオートロードされているシェフ生産の展開のための `作曲install`

を使用して〜200 EC2インスタンスにデプロイされるミッションクリティカルなアプリケーションを持っていますそれら。私たちの計画は、/ vendor内でComposer経由ですべてをインストールし、composer autoloaderを使用する従来のアプローチに移行することです。

私の質問は:私たちが/ bulk-deploy(同時に200以上のサーバー)をリリースすると、コードはGITからサーバー上の新しいリリースディレクトリにプルされるので、コンポーザインストールを実行する必要があります。コンポーザーインストールの信頼性を「高める」ための技術はありますか?実際には心配することはありません。私たちのサーバー数を考えると、1%の失敗率でさえ、クライアントが停止していることを意味します。

私たちは、各デプロイメントでコンポーザーのインストールを起動するアプリケーションがあります。少なくとも依存関係の1つが「ダウン」または移動したため、少なくとも24時間はデプロイできませんでした。この問題を回避するいくつかの方法はありますが、GITの主な依存関係を依然として避けていますか?

ありがとうございます!

答えて

1

コンポーザーインストールの信頼性を向上させる技術はありますか?

メインGITへの依存関係を回避しながら、この問題を回避する方法はありますか?

私の提案:

  • が生産
  • ビルドで作曲を実行し、composer installを実行し、依存関係を取得することは、最終製品ビルドステップ
  • で展開
  • 用にアプリケーションをパッケージ化していませんビルドツールチェーンは、ベンダーの依存関係やオートロードを含むパッケージ化されたアプリケーションです。展開の準備ができました。
  • 次にソフトウェアx1.2.3をx個のインスタンスに展開します

(Sidenote:Composer Autoloaderは再配置可能ファイルを生成します。パスは動的であり、特定のディレクトリには関連付けられていません。これにより、取り込まれたベンダーの依存関係を任意のフォルダに生成したパッケージアプリケーションを解凍できます。

+0

こんにちは、ありがとうございました! 私たちの展開が効果的にシェフを賞賛しているGITクローンであると考えると、「パッケージ製品制作ビルド」はどこでライブをお勧めしますか? GITに登録されているコードベースの「リリース」ブランチを持つことが「パッケージ化されたプロダクションビルド」状態を表すのは間違いでしょうか?コードをインスタンスでリモート消費するために他の場所に構築して保存する必要がありますか? 私はこのビルドが混乱/事故を避けるためにメインのGITリポジトリの外で生きるべきだと言っています。これを容易にするための推奨事項やツールはありますか? – sudoyum

+0

ねえ! 'git clone'ではうまくいきません。 gitのチェックアウトには 'composer.json'(または理想的には' composer.lock')が含まれています。それに基づいて、依存関係が引き込まれます。 - 確かに、それらをGitに保存し、 "dependencies included"ブランチに基づいてリリースタグを作成することは可能ですが、そうすることはお勧めしません。 –

+0

'はコードをビルドし、私たちのインスタンスがリモートで使用できるように別の場所に保存する必要がありますか?たとえば、単純なmakefile(またはPHPビルドスクリプトやAnt/Phingベースのbuild.xmlファイル)を使用して、いくつかのビルド作業を行うことができます: 'composer install' +' zip' + 'リリースのダウンロードフォルダへのアップロード' 。 –

1

Jenkinsを実装してGITを複製し、本番用のComposerインストールを実行し、いくつかのシェルスクリプトを実行してパッケージ化を支援しました。 .tar.gzを生成し、そのファイルをAWS S3のビルドバケット(ブランチ作成に基づいたファイル名)にパブリッシュします。 S3バケット(コードへのアクセスを保護する権限が非常に制限されています)からフェッチするようにデプロイメントシステムを調整しました。

関連する問題