質問
私は現在、チームが採用している展開の方法に非常に悩まされています...それは非常に昔ながらであり、うまくいかないことを知っています。しかし、私はそれを変更する方法を正確に知らないので、それについていくつかの提案をしてください...
これが私たちの現在のセットアップです:
- 2つのウェブサーバー
- 1データベースサーバー
- 1テストサーバー
現在の展開適応
- テストサーバーで開発して作業し、すべての変更がテストサーバーに手動でアップロードされます。
- 変更または機能が完了したら、SVNリポジトリの変更をコミットします。
- 変更をコミットした後、変更を最初のWebサーバーにアップロードします。ここでは、サーバー間でファイルを同期するために毎分走っているCronjobが走ります。
非常に厄介なことは、同期ジョブが始まるときと同じようにファイルをアップロードするたびに、同期されているファイルは、半分しか使用されていないため、破損しているように見えます。もう1つのことは、展開障害がある場合はいつでも、戻るのが非常に難しいことです。これらは基本的に私が直面している問題です、私は何をすべきですか?
さらに、1番目のWebサーバーには、いつでも他のサーバーに同期する必要があるファイルがあるため、Cronjobはその理由でそこにいました。
P/S:申し訳ありませんが、SVNサーバーがホストされていることを忘れてしまいました。私たちはそれをあまりコントロールしていませんが、私はフックを編集できると思います...
解決
次のような展開フレームワークを使用します ファン WebServersへの展開を管理し、Cronジョブを取り除くため。基本的に、生産システムでのリリースは自動的に発生するのではなく、現在のビルドが壊れていないことを確認した後のみです。また、開発システムに依存するべきではありません。
PhingはXMLとPHPを使用して展開プロセスを構成および制御するため、プロセスを制御することができます。これは、アプリケーションの特定のビルドに展開を接続し続けることができるため、追加の利点です。
制作ウェブサイトが展開プロセスの影響を受けるのを防ぐために、新しいビルドを別のディレクトリにアップロードしてから、それにsymlinkすることを検討してください。何か問題が発生した場合は、以前のバージョンに簡単にシンプリングできます。
また、考慮してください CIサーバーを使用します.
他のヒント
私は最後の場所で同じことをしました。私たちが持っていたのは:
- ウェブサイトごとのリポジトリ
- ライブサイト専用の各ウェブサイトのブランチ(すなわち
/branches/live
)およびテストサイト(すなわち/branches/testing
) - SVNと話すことができる2つのウェブサーバー
- SVNと通信できるテストサーバー
- すべてのサーバーには、SVNコマンドラインクライアントがインストールされていました
各Webサーバーは独立して動作していたため、お互いについて本当に知りませんでした - それはロードバランサーに残されました。各サーバーには、3時間ごとに実行されるCronjobがあり、 エクスポート 各Webサイトの最新バージョン live
ファイルシステムの正しいフォルダーに分岐します。
テストサーバーでは、 チェックアウト の testing
各Webサイトのブランチ、およびCronjobはありません。開発者は、ユーザーがライブになる前にテストするために何かを出したいと思うたびに、フォルダを更新しました。
開発中、コミットが行われました trunk
ウェブサイトの。変更がテストの準備ができたとき、それらはテストブランチにマージされ、チェックアウトはテストサーバーで手動で更新されました。変更が準備ができたとき、それらはライブブランチと融合され、1日の終わりまでにサーバーが更新されていました。
3年で、開発者が何かを誤ってコミットし、サイトを元に戻さなければならなかった問題は1つしかありませんでした。
部分的な修正として、RSYNCの実行時に制御できるように、RSYNCコマンドをトリガーするWebサイトにURLを作成します(明らかに、このURLでサーバー1を押して、このURLを公開しないようにする必要があります。一般に)。さらに良いことに、Curlを使用して、使用するアップロードスクリプトの最後にRSYNC URLを呼び出します。