チームシステムでの自動ビルドに必要なバイナリをどこに保存しますか?それらをコードと一緒にSCMまたは他の場所に保存していますか?SCMに大量のバイナリがあると、ソースコントロールでパフォーマンスの問題が発生しますか?
リリースされたバージョンのバグを修正するには、一部の外部ライブラリの以前のバージョンに戻すことができる必要がありますが、バージョンには互換性がありません。分岐でうまくいきますが、コードと一緒にバイナリを格納するのはアンチパターンだと思います。
どんな提案でも大歓迎です。
チームシステムでの自動ビルドに必要なバイナリをどこに保存しますか?それらをコードと一緒にSCMまたは他の場所に保存していますか?SCMに大量のバイナリがあると、ソースコントロールでパフォーマンスの問題が発生しますか?
リリースされたバージョンのバグを修正するには、一部の外部ライブラリの以前のバージョンに戻すことができる必要がありますが、バージョンには互換性がありません。分岐でうまくいきますが、コードと一緒にバイナリを格納するのはアンチパターンだと思います。
どんな提案でも大歓迎です。
Nexus と Artifactory は現在、.net 開発で使用されるバイナリ アーティファクトと依存関係のストレージをサポートしています。NuGet パッケージを使用した TFS ビルドと Visual Studio への統合については、このブログを参照してください。
cringeで説明されているように、これまでは常にsvn:externalsを使用していました。ただし、ローカルの作業コピーで更新するのは時間がかかります。私はこの問題を解決するために数人の友人とオープンソースプロジェクトを開始しましたが、これはまだ非常に初期の段階ですが、これがあなたが興味を持っている問題である場合は、それを監視することをお勧めします(またはそれを手伝うことさえ)。これはRefixと呼ばれ、CodePlexでホストされています。
バージョン管理システム (VCS) で、ソリューションを一緒に構築するために必要なソース コード、イメージ、ビルド スクリプト、その他すべての成果物と共に、外部のバイナリ依存関係を常に保存してきました。それが私が本当に得意とする VCS であり、ビルドのどのバージョンでも、ブランチであっても、必要なすべてのアーティファクトの適切なバージョンを利用できるようにします。
興味があります: なぜこれをアンチパターンと考えるのですか?
(これが古い質問であることは承知していますが、通常は Java ベースの私のチームは、.NET の作業を少し行っており、現在同じ質問をしています。これが私たちが見つけたものです。)
Git のような DVCS システムを使用している場合、これらのライブラリをソース管理にチェックインするとパフォーマンスの問題が発生する可能性があることは間違いありません。参考までに、Perforce から Git にバイナリをチェックインしたいくつかの大規模なプロジェクト (2 ~ 5 GB) を移行しました。インポートされた Git リポジトリ (SSD を使用する強力な Windows ボックスで Git 1.9 を使用) のパフォーマンスは、開発には不適切でした。これらの依存関係のほとんどをプライベート Nexus インスタンスからプルするようにビルドを微調整しました。大幅にスリムになったリポジトリ (50 ~ 200 MB のソース) はうまく機能しているようです。
すでに Nexus インスタンスを利用できる場合は、それを使用して .NET アーティファクトを保存することを妨げるものは何もありません。Nexus に関する限り、アーティファクトは単なるファイルです。DLL や構成ファイルなどを 1 つのファイルに圧縮すると、Nexus はそれをバージョン管理されたアーティファクトとして喜んでホストし、必要なときに適切な場所にダウンロード/解凍できます。(私は Artifactory を使用したことがないので、その機能についてコメントすることはできません。)
VisualStudio (または MonoDevelop) と具体的に統合するものが必要な場合は、NuGetが新たな答えのようです。
既定では、読み取りに関するアクセス制限のない中央の NuGet フィードがあります。ホスティングについては、そこでホストされる OSS/パブリック バイナリを送信できるようです。プロプライエタリ/プライベート バイナリをホストする場合は、独自のプライベート NuGet フィードをセットアップする手順があります。
Nexus の Pro バージョンをお持ちの場合、.NET アーティファクトをホストし、 NuGet を介したアクセスを許可すると主張していますが、私はそれを使用した経験がありません。
たとえば、Subversion にはsvn:externalsがあり、ライブラリを含む別のディレクトリの内容をインポートするために使用できます。外部は特定のリビジョンに固定できます。私にとってはそれがより良い方法であり、ネストされた作業コピーを避けます。