11

かなり複雑な Visual Studio ソリューションがあります (57 プロジェクト、そのうち 19 プロジェクトは、コードのプッシュによってトリガーされるたびにビルドに失敗する Web サイトですが、手動でビルドをトリガーし、再試行すると問題なくビルドされます。

このソリューションには 57 個のプロジェクトが含まれており、そのうち 19 個が Web サイト プロジェクトです。(Web アプリケーション プロジェクトではありません。.csproj ファイルはありません。) 残りはクラス ライブラリとバックグラウンド ジョブです。19 の Web サイト プロジェクトは、IIS 仮想ディレクトリ内で 1 つの大きな多機能コンテンツ管理システムに構造化されています。

ビルド サーバーは Hudson v1.395 です。ビルドに使用するコマンドは次のとおりです。

"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.com" "SolutionName.sln" /rebuild Debug

ビルドが失敗すると、常にまったく同じ Web サイト プロジェクトで、まったく同じメッセージが表示されます。

------ Rebuild All started: Project: C:\...\WebsiteName\, Configuration: Debug Any CPU ------
Validating Web Site
: Build (web): The application domain in which the thread was running has been unloaded.

Validation Complete

現在、このメッセージのGoogle 検索はあまり役に立ちません。このリンクは実際の問題に最も近いものですが、解決策はありません。明らかに、ビルド サーバー上で行われているため、ビルド中にソリューション ファイルを変更することはありません。

失敗すると、ビルドを手動でトリガーし、期待どおりに取得します (申し訳ありませんが、編集済み):

------ Rebuild All started: Project: C:\...\News2\, Configuration: Debug Any CPU ------
Validating Web Site
Building directory '/WebsiteName/Dir1/Dir2/'.
Building directory '/WebsiteName/'.
Building directory '/WebsiteName/Dir3/'.
// 22 more but you get the point

// A few warnings caused by our own use of the ObsoleteAttribute, nothing to be concerned about
Validation Complete

このアプリケーション ドメイン アンロード メッセージの原因は何ですか?

その他の注意事項:

  • Java がメモリをかなりリークしていることを確認しているため、Hudson がメモリ不足である可能性があると考えました。そこで、毎朝 6 時に Hudson サービスを再起動するタスクを追加しました。これと、ビルド中に使用可能な十分な量のメモリが用意されていても、それでも失敗しました。
  • 同じリポジトリにプッシュすると、同時に、はるかに単純な (22 プロジェクトのみ、Web サイト プロジェクトなし) ソリューションがビルドされます。そいつは必ず成功する。また、両方を同時に実行するように手動でトリガーすると、成功します。
  • Hudson をアップグレードする必要があることは承知していますが、これは常に、時間がないバックバーナー プロジェクトの 1 つです。いずれにせよ、これは Hudson の問題ではなく、Visual Studio / MSBuild の問題であると強く感じています。

編集 1: MSBuild

MSBuild の問題は、Visual Studio でのビルドとは異なる小さな癖が非常に多いことです。ソリューションが開発者のコ​​ンピューターの Visual Studio でコンパイルされ、ビルド サーバーで失敗することは、非常にイライラします。msbuild からの出力でさえ、開発者がビルド出力ウィンドウに表示するものとは大幅に異なります (1 つの点についてははるかに詳細です)。MSBuild の出力を Visual Studio のビルド ウィンドウで得られるものとより一致させる追加のコマンド ライン フラグはありますか?

むずかしいことは他にもあります。プロジェクトと同じ名前のソリューション フォルダーがある場合、MSBuild はエラーをスローしますが、Visual Studio は問題なく処理します。それらは本当にあなたの髪を引っ張る癖です.

4

3 に答える 3

6

Hudson/Jenkins での C++ ビルドに問題がありました。これは関連している可能性があります。一度に 2 つのビルドを実行すると、問題が発生する可能性があります。

これは、Hudson/Jenkins がプロセス ツリー キラーを実行してビルドの最後にプロセスをクリーンアップし、MsBuild/VisualStudio がビルド間でいくつかの共通プロセスを共有するためです。

C++ ビルドで発生した実際の問題は、別のエラーとして現れました。

fatal error C1090: PDB API call failed, 
error code '23' : '( 

ここで問題が提起されました:

https://issues.jenkins-ci.org/browse/JENKINS-9104

プロセス ツリー キラーをオフにすると、問題が解決する場合があります。

于 2012-12-10T10:35:41.357 に答える
2

私はハドソンやウェブサイトプロジェクト(私はTeamCityとウェブアプリケーションプロジェクトを使用しています)にあまり精通していませんが、それが役立つかどうかを確認するためにいくつかのことを投げかけると思いました。

Visual Studioを使用する代わりに、MSBuildを直接使用してソリューションを構築しようとしましたか?コマンドは次のようになります。

    %windir%\Microsoft.NET\Framework\<version>\MSBuild SolutionName.sln /t:Rebuild /p:configuration=debug

ビルドの完了後に閉じるためにコマンドラインスイッチをVisualStudioに渡していないことに気付きました/RunExitMSDN Link では、Visual Studio IDEがビルドごとにビルドサーバーで開いていて、閉じていない可能性がありますか?同じソリューションが開いているIDEの複数のインスタンスが問題を引き起こしているのを見ることができました。

IDE内に依存関係がない限り、可能であればVisualStudioの代わりにMSBuildを使用してビルドを実行することをお勧めします。Visual Studioをロードする必要がなく、ビルドプロセスの複雑さの層がなくなるため、少なくともビルド時間を短縮する必要があります。

この助けを願っています!

于 2012-05-09T02:01:35.690 に答える
2

同じチェックインの結果として実行されている別の同時ビルドは、それらが関連しているように感じます。関連するビルドの実行中にビルドの途中でリソースが消えると、関連するビルドが疑わしくなります。

手動で同時に実行できると言っていましたが、すべて問題ありません。私には競合状態のようなにおいがします。小規模なプロジェクトでは自動トリガーを無効にし、最終的な健全性チェックとしてコミットして、混乱していないことを確認してください。

まったく疑っていなければ、投稿で言及しなかったと思います。それを除外します。

于 2012-05-09T05:28:54.583 に答える