2

私のチームは、.NETベースのソフトウェアと他のいくつかのコンポーネントを構築しています。現在、TeamCityを使用して継続的インテグレーションを実行しています。MSBuildは.slnファイル(および単体テストなどの他の小さなタスク)をコンパイルするだけです。

ソース管理は、リポジトリに1回のコミット後にコンパイルされる多くの小さな「プラグイン」プロジェクトが含まれるように構成されています。

これにより、変更されたコンポーネントのみをビルドするだけでなく、後でビルドアーティファクトとしてそれらのみを配信することも困難になります。

ビルドターゲットを「再構築」ではなく「ビルド」に設定するなどのソリューションがここで役立つ場合がありますが、特にビルドが任意の数のビルド「エージェント」で実行される分散ビルド環境を扱う場合は、少し脆弱すぎるようです。 、以前のコンパイル出力がないものでも。

このシナリオに取り組む正しい方法は何だろうか?明らかに、これはおそらく処理され、多くの人によって処理されている既知の問題です。

現在のビルド(コードチェックイン)によって変更されたDLL /コンポーネントのセットを(ビルドごとに)ビルドして配信したいと思います。

これを達成するためにどのような手法を実装できますか?

4

4 に答える 4

3

これはインクリメンタルビルドと呼ばれ、長い間SCMプロセスの一部でした。Nant / msbuildスクリプトは、CLIからインクリメンタルビルドとフルビルドの両方を実行できる必要があります。そうでない場合、リリースプロセスの完全な独立したビルドセットアップとは呼ばれません。

buildforge、jenkins、cnuisecontrolなどのこれらのスクリプトをCIEに接続します。

これを実現する最善の方法は、Nant / Ant / msbuildでスイッチを使用することです。これにより、インクリメンタルビルドを実行しても、古いバイナリは削除されませんが、最新の変更のみがコンパイルされ、バイナリに関連するコード変更のみが作成されます。

RTC Enterpriseビルドには、インクリメンタルビルドとフルビルドの両方で、正常にコンパイルされた後にローカルワークスペースをビルドした後、ストリーム/ブランチにポストデリバリーする機能があります。

ただし、CIEツールを使用して実現するのではなく、ビルドスクリプトを使用してこれを実現することをお勧めします。これにより、開発の利害関係者はビルドとパッケージ化のロジックを完全に制御し、ビルドエンジニア(サードパーティの独立したエンティティ)への依存を排除​​できます。アプリケーションのコンパイルロジックを理解し、間違ったビルド、人為的エラーなどのほとんどの固有の問題から多くの時間を節約します。

于 2012-11-24T18:17:40.527 に答える
2

1つの解決策は、「再構築」ではなく「構築」です。ビルドが複数のエージェントで実行される場合は、ビルドプロセスの最後に共有の場所でビルドアーティファクトをアーカイブし、次のビルドの開始時にそれらのアーティファクトをビルドワークスペースにコピーします(つまり、彼の最後にアーティファクトのアーカイブを自動化しますビルドして、ビルドの開始時にコピーします)。コピー元のアーティファクトがないため、最初のビルドは失敗します...したがって、失敗しても続行するか、前に手動で作成して、そのステップを続行します。彼の最初のビルドを実行します。これにより、ビルド時間が1〜2分長くなります。したがって、共有ロケーションがビルドエージェントと同じネットワーク内にあることを確認してください...

于 2012-11-25T16:00:14.563 に答える
1

各プラグインが独自の小さなプロジェクトに配置されるように、ソース管理を再構築する必要がある場合があります。それらがすべて参照する共有コードは、共通のDLLを生成する独自のプロジェクトに含まれます。

Lioraはアセットリポジトリについて言及しています。これらすべての小さなライブラリを保存する場所が得られるので、これは重要です。.Netランドでは、そのためのNuGetについてますます耳にします。

プラグインに変更が加えられると、CIシステムがそれを取得し、共通/共有ライブラリをプルしてからビルドを実行し、そのプラグインの新しいバージョンを公開するという考え方です。共有コードが変更されたときに何が起こるかはもっと興味深いものです。それをビルドするだけの場合もあれば、すべての依存関係のビルドをトリガーする場合もあります。

数年前、ビルド管理の苦痛を軽減することについて書いた記事でこれに触れました:http ://www.urbancode.com/html/resources/articles/build-pain-relief/components.html

于 2012-11-23T19:21:25.707 に答える
0

正しい問題が発生したかどうかはわかりません。しかし、私が理解したことから、ビルド結果のアーティファクトを管理するある種のアセットライブラリを使用する必要があります。アセットが更新されると、フォローアップアクションを構成できます。

これで問題が解決するかどうか教えてください。

リオーラ

于 2012-11-23T11:54:10.230 に答える