10

Wir haben eine ziemlich komplexe Visual Studio-Lösung (57 Projekte, 19 davon sind Websites, die nicht fast jedes Mal erstellen, wenn durch Push-Code ausgelöst wird, aber dann manuell auslösen wir den Build und Beim Versuch, es erneut zu versuchen, baut es sich gutVisual Studio Website Build schlägt auf CI-Server intermittierend fehl

Die Lösung enthält 57 Projekte, von denen 19 Website-Projekte sind (nicht Web-Anwendungsprojekte gibt es keine .csproj-Datei.) Der Rest sind Klassenbibliotheken und Hintergrundjobs Website-Projekte sind in virtuellen IIS-Verzeichnissen in einem großen multifunktionalen Content-Management-System strukturiert

Der Build-Server ist Hudson v1.395 Der Befehl zum Erstellen ist:

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

Wenn der Build fehlschlägt, tut es immer so auf dem exakt gleichen Website-Projekt, mit der exakt gleichen Nachricht:

------ 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 

A Google Search for this message ist derzeit weniger als hilfreich. This link kommt dem eigentlichen Problem am nächsten, hat aber keine Lösung. Offensichtlich ändern wir keine Lösungsdateien während des Builds, da sie auf dem Build-Server auftreten.

Wenn es fehlschlägt, auslösen wir die Build manuell, und wir bekommen, wie wir erwarten (sorry, unkenntlich gemacht):

------ 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 

Was könnte diese Anwendungsdomäne verursachen Nachricht entladen?

Einige andere Hinweise:

  • Wir dachten, es Hudson aus dem Speicher ausgeführt werden könnten, weil wir Java tun beobachten es durchaus ein wenig undicht. Also haben wir jeden Morgen um 6 Uhr eine Aufgabe hinzugefügt, um den Hudson-Dienst neu zu starten. Selbst mit dieser und einer vernünftigen Menge an verfügbarem Speicher, die während des Builds verfügbar war, ist es immer noch fehlgeschlagen.
  • Ein Push zu demselben Repository verursacht auch die Erstellung einer viel einfacheren Lösung (nur 22 Projekte, keine Website-Projekte) zur gleichen Zeit. Das gelingt immer. Außerdem ist es möglich, beide gleichzeitig zu starten, um gleichzeitig ausgeführt zu werden.
  • Ich weiß, wir sollten Hudson upgraden, aber das ist immer eines dieser Backburner-Projekte, für die wir nie Zeit zu haben scheinen. In jedem Fall fühle ich ziemlich stark, dass dies ein Visual Studio/MSBuild-Problem ist, kein Hudson-Problem.

Edit 1: MSBuild

Das Problem mit MSBuild ist, dass es so viele kleine Macken sind, die von einem Build in Visual Studio unterscheiden. Es ist extrem frustrierend, wenn eine Lösung in Visual Studio auf einem Entwicklungscomputer kompiliert wird und dann auf dem Build-Server fehlschlägt. Sogar die Ausgabe von Msbuild ist drastisch anders (viel ausführlicher für eine Sache) von dem, was unsere Entwickler in ihrem Build-Ausgabefenster sehen. Gibt es zusätzliche Befehlszeilenflags, die die MSBuild-Ausgabe mehr in die Reihe bringen, die Sie im Visual Studio-Erstellungsfenster erhalten?

Es gibt andere Dinge, die auch peinlich sind. Wenn Sie einen Projektmappen-Projektmappen-Projektmappenordner haben, gibt MSBuild einen Fehler aus, aber Visual Studio erledigt das Problem. Das sind die Macken, die dich wirklich dazu bringen, dir die Haare auszuziehen.

Antwort

2

Ich bin nicht so vertraut mit Hudson oder Website-Projekt (ich benutze TeamCity und Web-Anwendungsprojekte), aber ich dachte, ich würde ein paar Dinge werfen, um zu sehen, ob es helfen würde.

Haben Sie versucht, die Lösung mit MSBuild direkt anstelle von Visual Studio zu erstellen? Der Befehl würde wie folgt aussehen:

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

Ich habe bemerkt, dass Sie nicht die Befehlszeilenoption zu Visual Studio passierten nach dem Build zu schließen ist komplett/RunExit MSDN Link So könnte es sein, dass das Visual Studio IDE öffnet auf Ihrem Build-Server für jeden Build und nicht geschlossen? Ich konnte mehrere Instanzen der IDE sehen, die die gleiche Lösung geöffnet haben, die Probleme verursacht.

Ich würde empfehlen, wenn Sie Ihren Build mit MSBuild statt Visual Studio ausführen können, wenn Sie eine Abhängigkeit von etwas in der IDE haben. Sie sollten zumindest schnellere Build-Zeiten erhalten, da Sie Visual Studio nicht laden müssen und eine Komplexitätsebene in Ihrem Build-Prozess entfernt wird.

Hoffe diese Hilfe!

+0

Bezüglich MSBuild, siehe "Edit 1", die ich an meine Frage angehängt habe. Obwohl nicht meine Lieblingsoption, werde ich es versuchen. Ich werde auch/RunExit versuchen, obwohl wir nicht beobachten, dass Devenv-Instanzen auf dem Server bleiben. Auch eine Klarstellung - obwohl beide Lösungen aus dem gleichen Repository stammen, sind beide Lösungen vollständige Klone, so dass zwischen den beiden konkurrierenden devenv-Instanzen keine gemeinsame Nutzung stattfindet. –

+0

in Bezug auf die Protokollierungsebenen auf MSBuild, können Sie es mit dem/Ausführlichkeitsflag ändern [MSDN-Link] (http://msdn.microsoft.com/en-us/library/ms164311.aspx) –

+0

** Diese Option ist nicht verfügbar für Visual Studio 7.0-9.0 (2003-2008) und C++ - Projekte! ** (VS 10.0 konvertierte C++ - Projekte nach Msbuild, so dass es dort möglich ist). –

2

Ein anderer gleichzeitiger Build, der als Ergebnis desselben Checkins ausgeführt wird, fühlt sich an, als wären sie verwandt. Eine Ressource, die mitten in meinem Build verschwindet, während ein verwandter Build ausgeführt wird, macht mich misstrauisch gegenüber dem verwandten Build.

Ich weiß, Sie haben gesagt, Sie können sie zur gleichen Zeit manuell ausführen und alles ist gut. Es riecht für mich allerdings nach einer Rennbedingung. Versuchen Sie, den automatischen Auslöser bei den kleineren Projekten zu deaktivieren und bestätigen Sie dies als letzte Überprüfung, um sicherzustellen, dass Sie nichts falsch machen.

Ich stelle mir vor, dass, wenn Sie es überhaupt nicht vermutet hätten, Sie es in Ihrem Beitrag nicht erwähnt hätten. Richte das aus.

6

Ich hatte ein Problem mit C++ - Builds auf Hudson/Jenkins, das wahrscheinlich verwandt ist, wenn Sie zwei Builds gleichzeitig haben, dann können schlimme Dinge passieren.

Dies liegt daran, dass Hudson/Jenkins einen Prozessbaumkiller ausführen wird, um Prozesse am Ende eines Builds aufzuräumen, und MsBuild/VisualStudio wird einige gemeinsame Prozesse zwischen Builds freigeben.

Das eigentliche Problem, das ich mit dem C++ hatte baut sich als ein anderer Fehler manifestiert:

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

Die Frage ist hier angesprochen wurde:

den Prozessbaum Killer ausschalten

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

können Ihre lösen Problem.