Nach einiger Zeit ist mir aufgefallen, dass ein .NET Buildprozess auf Jenkins erheblich länger dauert als normal. Dieser Artikel zeigt euch eine mögliche Lösung.

Symptome

Ich habe die Beobachtung gemacht, dass die Projekte anstatt ca. 4 Minuten plötzlich 15-20 Minuten gebraucht haben. Auch andere Projekte, die in 2-3 Minuten normalerweise beendet wurden, hatten eine Ausführungszeit von 10-15 Minuten.

Der Log sah bei allen Projekten ähnlich aus: Erst wurde das Projekt in der üblichen Zeit erstellt. Anschließend hat der Prozess anscheinend garnichts gemacht. Nach einer längeren Pause wurde MSBUILD abgeschlossen und die Konsolenausgabe auf Warnungen oder Fehler analysiert.

Mögliche Lösung

Hervorgerufen hat dieses Verhalten ein Parameter beim Aufrufen von msbuild. Mit dem Parameter /m werden mehrere msbuild-Prozesse gestartet und von anderen Builds wiederverwendet. Dadurch werden die gestarteten Prozesse nicht automatisch beendet, auch wenn das Projekt bereits erfolgreich kompiliert wurde.

Das msbuild-Plugin wartet darauf, dass der Prozess beendet wird, um weitere Schritte (hier: Analyse der Konsolenausgabe) durchzuführen. Dieses Problem wurde auch bereits im Jenkins Bugtracker (JENKINS-56234) gemeldet.

Es bieten sich verschiedene Lösungen an, um das Problem zu beheben:

  • Den Parameter /m wieder entfernen
  • Das Wiederverwenden der Prozesse mittels /nr:false deaktivieren
  • Das Wiederverwenden durch set MSBUILDDISABLENODEREUSE=1 in den Umgebungsvariablen deaktiveren

Diese Lösungen haben mir geholfen, die Ausführungszeit wieder auf das Normalmaß zu reduzieren.


Bildnachweis: Pixabay.com