10

非常に複雑なVisual Studioソリューション(57プロジェクト、19プロジェクトはWebサイトで、コードをプッシュすることによってほとんど毎回ビルドが失敗しますが、Visual Studio WebサイトのビルドがCIサーバー上で断続的に失敗する

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

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

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

ビルドが失敗した場合、それは常に正確に同じメッセージで、正確に同じウェブサイトのプロジェクトでそうする:

------ 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 Search for this messageは役に立つより現在小さいです。 This linkは実際の問題に最も近いものの解決はありません。明らかに、我々はビルド中にソリューションファイルを変更していないのは、ビルドサーバー上で発生しているためです。

それが失敗した場合、我々は手動でビルドをトリガし、そして我々は(申し訳ありませんが、編集さ)期待通りに我々が得る:

------ 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を観察しないので、それは、メモリ不足ハドソンことができると思っていました。そこで、毎朝午前6時にハドソンサービスを再開する作業を追加しました。これとビルド中に利用可能な空き容量のあるメモリでも、それでも失敗しました。
  • 同じリポジトリへのプッシュでも、はるかに単純な(わずか22のプロジェクト、ウェブサイトプロジェクトなし)のソリューションが同時にビルドされます。それは常に成功する。また、両方を同時に起動するように手動で起動すると成功します。
  • 私はハドソンをアップグレードするべきだと知っていますが、それはいつも私たちが時間がないようなバックバーナープロジェクトの一つです。いずれにせよ、私はこれがVisual Studio/MSBuildの問題であり、ハドソンの問題ではないことをかなり強く感じています。

編集1:MSBuildの

のMSBuildの問題は、Visual Studioでのビルドとは異なり非常に多くの少し癖があるということです。開発者のマシンでVisual Studioでコンパイルしてビルドサーバーで失敗するというソリューションは非常に不満です。 msbuildからの出力でさえ、開発者がビルドアウトプットウィンドウに表示しているものとは大幅に異なります。 Visual Studioのビルドウィンドウに表示されるものとMSBuildの出力を一列に並べる追加のコマンドラインフラグがありますか?

あまりにも厄介なこともあります。プロジェクトと同じ名前のソリューションフォルダがあると、MSBuildはエラーをスローしますが、Visual Studioはそれを正常に処理します。それらは本当にあなたがあなたの髪を引っ張るようにする癖です。

答えて

2

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

Visual Studioを使用する代わりに直接MSBuildを使用してソリューションを構築しようとしましたか?コマンドは次のようになります。私はあなたがビルドした後閉じるためのVisual Studioにコマンドラインスイッチを渡していなかったことに気づい

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

をRunExit MSDN Link /完了するので、それは、Visual Studio IDEが開いていることが考えられすべてのビルドのためのあなたのビルドサーバーではなく、閉じる?私は、問題の原因となっている同じソリューションを開いているIDEの複数のインスタンスを見ることができました。

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

は、このヘルプを願っています!

+0

MSBuildについては、私の質問に追加した「Edit 1」を参照してください。私のお気に入りのオプションではないが、私はそれを試してみる。私はtry/RunExitもやっていますが、私たちはdevenvのインスタンスをサーバー上で守っていません。また、同じリポジトリからでも、両方のソリューションが完全なクローンであるため、2つの同時devenvインスタンスの間で何らかの種類の共有は行われません。 –

+0

MSBuildのログレベルに関しては、/ verbosityフラグ[MSDNリンク](http://msdn.microsoft.com/en-us/library/ms164311.aspx) –

+0

**を使用して変更できます**このオプションVisual Studio 7.0-9.0(2003-2008)およびC++プロジェクトでは使用できません!**(VS 10.0はC++プロジェクトをmsbuildに変換しました。 –

2

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

あなたはあなたが手動で同時にそれらを実行することができ、すべてがうまくいっているとお知りになりました。それは私に競争条件のようなにおいがする。小規模プロジェクトで自動トリガーを無効にして、最終的なサニティチェックとしてコミットして、あなたを台無しにしていないことを確認してください。

あなたがそれをまったく疑わなければ、あなたはあなたの投稿にそれを言及していないだろうと思います。それを支配する。

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

解決することができるプロセスツリーキラーをオフにあなたの問題。

関連する問題