2013-03-12 6 views
11

Ich verwende TFS 2012 Update 1 auf Windows Server 2008 R2. Wir haben den TFS-Build unter dem Konto TFSUser ausgeführt. Neulich hatten wir auf unserer Buildmaschine keinen Platz mehr. Bei der Untersuchung fand ich, dass der Ordner C: \ Benutzer \ TFSUser \ AppData \ Local \ Temp über 50 GB Dateien enthielt, einige davon bis Oktober 2012. Keine der Dateien ist übermäßig groß, aber sie nicht scheinen jemals aufgeräumt zu werden.Große TFSUser AppData Local Temp-Verzeichnis auf Build Machine

Die heutige Untersuchung zeigt, dass der Ordner während eines automatisierten Builds viel geschrieben wird. Warum werden diese Dateien nicht bereinigt und was kann ich tun, um sicherzustellen, dass mein Build-Rechner aufgrund dieses Problems nicht mehr über genügend Speicherplatz verfügt?

-Update 2013-03-13
habe ich einen kleinen Powershell-Skript, das jede Nacht den Temp-Verzeichnis Inhalt löschen läuft. Hier ist der Powershell-Skript:

Stop-Service TFSBuildServiceHost.2012 
Remove-Item Drive:\Path\To\TFSUser\AppData\Local\Temp\* -recurse -exclude Build* 
Start-Service TFSBuildServiceHost.2012 

ich die Aufgabe Lauf mit erhöhten Rechten habe jede Nacht als TFSUser Konto. Die erhöhten Berechtigungen werden benötigt, da wir Dienste starten und stoppen müssen.

Antwort

8

Dies ist ein TFS2010 Problem, das ich denke, dass sie 2012 noch nicht angesprochen haben. Das Build-System erstellt temporäre Dateien und bereinigt diese nie, was schließlich zu Fehlern führt, da die Festplatte voll ist oder weil sie eine begrenzte Anzahl von Ziffern für die eindeutigen IDs verwenden und keine neuen IDs mehr verwenden können (IIRC, sie fällt um bei 65536 Dateien, die wir normalerweise treffen, lange bevor wir Speicherplatz frei haben)

Die Lösung besteht darin, die temporären Dateien regelmäßig zu löschen. Ich mache das manuell etwa 2-4 mal im Jahr. Der sicherste Ansatz besteht wahrscheinlich darin, Ihre Buildagenten zu deaktivieren und dann den temporären Ordner zu entfernen und dann die Agenten erneut zu aktivieren (und es ist möglicherweise keine schlechte Idee, den Server zur gleichen Zeit neu zu starten, wenn er seit Monaten ausgeführt wird).

Eine Alternative kann eine kleine geplante Aufgabe täglich/wöchentlich einzurichten sein, dass alle temporären Dateien, die älter als ein paar Tage alt reinigt entfernt und es in der Mitte der Nacht ausgeführt werden, wenn Sie nichts anderes (über Nacht wie Builds) kennt wird laufen.

Oder wenn Ihr Server mehrmals im Jahr auf jeden Fall, ein Start-up-Skript, das aus reinigt die Temp-Ordner vor den Build-Agenten starten kann eine saubere & saubere Lösung neu gestartet wird.

Es hängt alles davon ab, wie schnell sich Ihre Festplatte füllt - Sie werden wahrscheinlich feststellen, dass es viele Monate angesammelten Grus ist, anstatt etwas, das Sie nach kurzer Zeit trifft. In diesem Fall brauchen Sie keinen sehr aggressiven Ansatz um die Dinge reibungslos laufen zu lassen.

+0

Danke Jason. Ich werde in ein kleines Skript schauen, das ausgeführt wird, da ich ziemlich vergesslich bin (weshalb ich es programmiere). :-) –

+1

Stellt sich heraus, dass ich auch ziemlich vergesslich bin :-) ... Ich habe heute Morgen unseren Server überprüft und eine geplante Aufgabe eingerichtet, die jeden Samstagabend um 23:30 Uhr läuft und eine 2-Zeilen-Linie fährt Stapelskript: 'del/F/S/Q" C: \ Dokumente und Einstellungen \ TFSSERVICE \ Lokale Einstellungen \ Temp \ *. * "' 'del/F/S/Q" C: \ WINDOWS \ Temp \ *. * "' –

+0

Dieses Problem ist aufgetreten, als unsere vdproj-Setup-Projekte auf dem TFS 2010-Build-Server fehlgeschlagen sind. Devenv versucht beim Erstellen des MSI temporäre Dateien zu erstellen. Dieses Problem wurde nur durch das Starten von VS und das Erstellen eines neuen MSI-Projekts/vdproj (auf dem Build-Server) bei gleichzeitigem Einsatz von ProcMon festgestellt und anschließend eine große Anzahl von * NAME COLLISION * -Ergebnissen bei CreateFile-Operationen in den AppData des Build-Service festgestellt \ Local \ Temp-Ordner. Löschen Sie dies jetzt ... –