2011-09-07 6 views
9

ショートバージョン毎晩配布するためにGitリポジトリを使用すると、スタジオに構築し

毎晩配布する必要があり、毎朝人々を70+するビルドを転送の負荷を分散するためにgitのを使用したい、と知っていただきたいと思います私がシステムの設計を始める前に、ヒント、落とし穴、または欠陥がある場合は、

ロングバージョン

我々は70+人々(アーティスト、テスター、プログラマー、生産など)のスタジオに私たちのナイトリービルドを配布する必要が毎朝。今まではビルドをサーバーにコピーし、シンクプログラムをフェッチするプログラムを作成しました(Robocopy下)。ミラーを設定しても転送速度は許容できないほど遅く、ハードウェアのI/Oボトルネックとなるピーク時(オフピーク時間は約15分)に同期するのに1時間以上かかることがあります。

スタジオ全体に負荷を分散させることが、私が持っていた素晴らしい(しかし確かにオリジナルではない)アイデアでした。悪意のあるビットトレントプロトコルを使ってクライアントを書くことを調べた後、私はちょうどgitを使用することができたと私は思いました。

質問

  1. はどのようにgitのを使用して始めるのですか?私はPerforceSVNのような中央に位置するソース制御システムの経験があります。マニュアルを読むと、実行する必要があるのはgit init path\\to\folderで、別のマシンではgit clone urlを実行しているようです。

  2. git cloneコマンドの場合、urlはどこで入手できますか?定義できますか?私はgitに中央サーバがないのでURLが奇妙であるというコンセプトを見つけますか?例えばビットトレントのトラッカーに似ていますか?

  3. ビルドを識別するには、チェンジリスト番号またはラベルを使用する方が良いでしょうか?

  4. 保存されているリビジョン数を制限することはできますか?これは夜間のビルドに加えて、私たちが配布したいと思ういくつかのCIビルドを1日中に持っているので便利ですが、無限の数のリビジョンが残っているのは意味がありません。 Perforceでは、プロパティを設定してリビジョンを制限できます。

+0

私はビットトレントをさらに詳しく見ていきたいと思います。ほとんどのクライアントは.rssフィードから急流を得ることをサポートしています。最新のビルドでフィードを公開し、全員に自動的にダウンロードさせることができます。 – grapefrukt

+0

カスタムマシンをプロダクションとして使用して、ビットトレントクライアントをユーザマシンにインストールすることは決してありません。 uTorrent。しかし、私はRSSフィードを公開して自動的に同期するというアイデアが好きです(これは、先週のソリューションで私たちがハックしなければならなかったものです)。 – Dennis

+0

gitでさらに読んだところ(答えに表示されたリンクのおかげで)、私はBitTorrentをもう一度見直す必要があると思います。 – Dennis

答えて

4

私はgitが本当にあなたの状況に役立つとは思わない。はい、配布されていますが、「可能な限り多くの人に何かを配布する」場合はそうではありません。帯域幅を減らすのに役立つわけではありません。また、gitをsshで使用する場合は、追加の負荷がかかります。あなたは一歩踏み出して、ビットトレントプロトコルに新たなチャンスを与えるべきかもしれません。

+0

ありがとうドミトリー。私はこの質問をしたことをうれしく思っています。分散していると仮定すると、フェッチ*がバランスを取ることになります。 – Dennis

+0

私はこれを達成するためにBitTorrentを使用することに関する別の質問があります:http://stackoverflow.com/questions/7344727/using-the-bittorrent-protocol-to-distribute-nightly-and-ci-builds – Dennis

1
  1. すべてのクライアントがサーバーへの共有アクセス権を持っている場合は、ファイルプロトコル(「local protocol」)を使用することができます。
  2. あなたのクライアントからdirまたはlsを作成できる場合は、必要なURLがあります。
  3. タグ:リポジトリをクローンすると、特定のタグにチェックアウトすることができます。
  4. 本当にそうではありませんが、あなたは完全な歴史を得るために毎朝新しいコミットを取ります。

注:分散リポジトリにバイナリを置くことは解決策ではありませんwill scale well in time、レポが大きくなります。 (あなたはalternative git setups hereです)。
中央のGitリポジトリ(これはrobocopyよりも速くなければならない)によってデルタを計算し、ダウンストリームレポによって行われたgit fetchへの回答としてデルタを送信することが利点です。

+0

あなたの答えをありがとう。私は*代替のgitの設定*を見ていきます。 *私は*ソース管理ソリューションにバイナリを格納するのが好きではありませんが、これは個々のファイル(* Epic *と* Unreal 3 *の握手)を実行できるときに実行ファイルに組み込まれているため、 。 – Dennis

1
  1. はい、それはその本質です。どこかでリポジトリを作成してから、別の場所からリポジトリを複製できます。

  2. 1)で初期化するリポジトリは、クローン作成先のマシンからアクセスできる必要があります。 Gitはサーバーレスですが、すべてのリポジトリはどこかから自分のものを取得する必要があります。だからあなたの70台以上のマシンは、どこに新しいビルドを入手すべきかを知る必要があります。また、負荷を分散したい場合は、誰が誰から更新情報を取得するかについての状態を把握する必要があります。

    URLは

  3. タグがうまく機能するであろうファイルパス、あるNetworkPath、パスとSSHのホスト、などである可能性があります。

  4. おそらくgit repoをリベースして古いリビジョンを削除することができます。 Completely remove (old) git commits from history

しかし、私はそれがあなたの元の問題を解決し、負荷を分散するとは思わない。他の手段も調査すべきである。例えばマルチキャストコピー、おそらくMQcast and MQcatchはあなたを助けることができますか?

+0

あなたの答えをありがとう、私あなたが言及したマルチキャストオプションを調査します。 – Dennis

関連する問題