通常、「継続的なパッケージ統合」には、ソース管理、ビルドサーバー、および参加チームが更新されたパッケージを好きなだけフェッチすることが含まれます。しかし、私はこのストーリーのより極端なバージョンを探しています-CMなしで-完全に開発者のマシンで、すべて一挙に行われます。私が欲しいもののより詳細な説明はこのようになります...
Visual Studio 2010または2012を使用して、プラグインシステムを実装する「foo.csproj」アプリケーションを想定します。各プラグインはnugetパッケージを表し、対応するVisualStudioプロジェクトがあります。これらの各プロジェクトは、基本アプリケーションを含む同じVSソリューションの一部です。
次の開発ストーリーが必要です。
- プラグインのソースコードを変更します。
- ソリューションをビルドするか、デバッグ起動を実行します。これにより、msbuildは...
- 変更したプラグインを再構築します
- 次に、nugetは各プラグインをパッケージ化して、ローカルリポジトリ(VSソリューションの単なるサブフォルダーにすることができます)にアップロードします。
- ベースアプリケーションを再構築します。
- 前の手順で更新されたベースアプリケーションのnuget-plugin依存関係を更新します。 注:
- これは、MSBuildが、すべてのプラグインがビルド、パッケージ化、およびアップロードされるまで、この最後の手順を実行しないことを魔法のように知っていることを前提としています。
- 「foo」アプリケーション自体がnuget.coreを使用してパッケージを更新できますが、この場合、VSビルドプロセスがこの手順を実行したと想定しています。
このストーリーが十分に一般的であり、このための「一般的な」(msbuild?)スクリプトがあるかどうかを知りたいです。
これがどのように扱われるべきかについての私自身の推測は次のとおりです。
- すべてのプラグインプロジェクトは、VSソリューションフォルダー構造のどこかにある共通の「プラグイン」フォルダーに配置されます。
- 基本アプリケーションの「プロジェクトの依存関係」は、すべてのプラグインプロジェクトへの参照を使用して構成されます。 注:これらのプロジェクトの依存関係を手動で管理するというアイデアは好きではありません。
- 基本アプリケーション「foo.csproj」には、「foo.csproj」XMLをスキャンして「plugins」フォルダーにある依存関係を探し、それぞれのnugetパッケージ化とデプロイを開始するビルドステップがあります。
- 次に、ベースアプリケーションは、nugetの「すべて更新」を開始します。うまくいけば、msbuildがすでに実行中の途中であっても、これが可能です。
つまり、ベースアプリケーションは、変更されたプラグインを即座に使用できます。これは、チェックイン、ビルドサーバー、またはプラグインパッケージを更新するための手動および任意の要求なしで実行されます。
このストーリーの既存のスクリプトがまだ存在しない場合は、自分で作成します。しかし、私はまだ知りたいです:
- すぐ上のステップ2を一般的なものに変換できますか?つまり、特定のフォルダー内のすべてのプロジェクトが既にビルドされるまで、「ベースアプリケーション」をビルドしないようにmsbuildを説得するにはどうすればよいですか?プロジェクトの依存関係を手動で管理したくないことを忘れないでください。
- この全体的なアプローチに欠陥はありますか?
私が見落としているかもしれないこの話を支援する既存のnuget-visual-studio統合があるかどうかを知ることに特に興味があります。