2012-10-07 10 views
8

裸のリモートレポを使ってウェブサイトのアップデートを自動的に展開する方法は2つあります。ウェブサイトのデプロイメントのために 'git pull'と 'git checkout -f'を使用する

最初にリポジトリがWebサーバーのドキュメントルートに複製され、更新後のフックでgit pullが使用されている必要があります。

cd /srv/www/siteA/ || exit 
unset GIT_DIR 
git pull hub master 

2番目のアプローチでは、「デタッチされた作業ツリー」がベアリポジトリに追加されます。ポスト受けるフックは最初のアプローチは、ディレクトリをすることができます作業のウェブサイトで行われた変更という利点があり

GIT_WORK_TREE=/srv/www/siteA/ git checkout -f 

すなわち、Webサーバのドキュメントルートである作業用ディレクトリにリポジトリのHEADを複製する -f Gitのチェックアウトを使用していますコミットされ、裸のレポにプッシュバックされます(ただし、ファイルはライブサーバー上で更新されません)。 2番目の方法は、gitディレクトリがドキュメントルート内にないという利点がありますが、これはhtaccessを使って簡単に解決できます。

ベストプラクティスという点で、ある方法は他の方法よりも客観的に優れていますか?他にどのような利点と欠点がありますか?

答えて

4

リリース管理(ここではデプロイ)では、リリースメカニズムとは独立したターゲット環境を持つことが最善です。
つまり、2番目の解決策(checkout -f)は、プレーンWebディレクトリ構造を変更し、その一部ではない他のサブディレクトリ(.gitフォルダなど)を使用しません。
"using git to deploy my node.js app to my production server"のように使用します。

これにより、副作用が最小限に抑えられ、運用環境が干渉することなく、実行するだけで動作することが可能になります。

+0

リリースメカニズムとは独立した「ターゲット環境」を持たないというリスク/短所は何ですか?私が考えることができるのはあなたが言及したものです。必要な.htaccessルールを使って簡単に緩和できる.gitフォルダです。私は何が欠けていますか?どんなアドバイスも感謝しています。 – Michelle

+2

@Michelleリリース管理の面では、プロダクションプラットフォームに置かれている/配備されている/管理されているものを厳密に管理しようとしています。アプリを実行するために必要なものだけでなく、余分なツール(git)ではありません。つまり、これは絶対的なルールではなく、 "一般的なベストプラクティス"であり、あなたの状況では、あなたは完全にあなたのprodプラットフォームにgit repoをそのまま保つことができます。 – VonC