2013-03-12 11 views
11

Utilizzo TFS 2012 Update 1 su Windows Server 2008 R2. Abbiamo la build TFS in esecuzione con l'account TFSUser. L'altro giorno abbiamo esaurito lo spazio sulla nostra macchina di costruzione. Dopo un'indagine, ho scoperto che la cartella C: \ Users \ TFSUser \ AppData \ Local \ Temp conteneva oltre 50 GB di file, alcuni risalenti fino all'ottobre 2012. Nessuno dei file è troppo grande, ma non lo è sembra che si sia ripulito.Directory TFSUser AppData Local Temp su macchina build grande

Investigare oggi mostra che la cartella viene scritta molto durante una compilazione automatica. Perché questi file non vengono ripuliti e cosa posso fare per garantire che il mio computer di costruzione non esaurisca lo spazio di nuovo a causa di questo problema?

Aggiornamento 2013-03-13
ho creato un piccolo script PowerShell che corre di notte per cancellare il contenuto della directory Temp. Ecco lo script PowerShell:

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

ho l'esecuzione dell'attività con privilegi elevati notturni come account TFSUser. I privilegi elevati sono necessari perché abbiamo bisogno di avviare e interrompere i servizi.

risposta

8

Questo è un problema TFS2010 che immagino non abbiano ancora risolto nel 2012. Il sistema di generazione crea file temporanei e non li pulisce mai, portando infine a errori perché il disco è pieno o perché usa un numero limitato di cifre per gli ID univoci e esaurisce i nuovi ID che possono essere utilizzati (IIRC, cade sopra a 65536 file, che di solito colpiamo molto prima di eseguire spazio su disco)

La soluzione è eliminare periodicamente i file temporanei. Lo faccio manualmente solo circa 2-4 volte all'anno. L'approccio più sicuro è probabilmente quello di disabilitare gli agenti di compilazione e quindi ripulire la cartella temporanea, quindi riattivare gli agenti (e potrebbe non essere una cattiva idea riavviare il server allo stesso tempo se è in esecuzione da mesi).

Un'alternativa può essere quella di impostare una piccola attività pianificata giornaliera/settimanale che pulisce via qualsiasi file temporaneo più vecchio di alcuni giorni e lo esegue nel mezzo della notte quando non si sa nient'altro (come durante la notte) sarà in esecuzione.

Oppure, se il server viene riavviato più volte l'anno, uno script di avvio che ripulisce la cartella temporanea prima dell'avvio degli agenti di compilazione può essere una soluzione pulita & ordinata.

Tutto dipende da quanto velocemente il tuo disco si sta riempiendo - probabilmente troverai che sono molti mesi di cruft accumulato piuttosto che qualcosa che ti colpisce dopo poco tempo, nel qual caso non hai bisogno di un approccio molto aggressivo per mantenere le cose senza intoppi.

+0

Grazie Jason. Vedrò una piccola sceneggiatura che viene eseguita poiché sono piuttosto smemorato (quindi perché programma). :-) –

+1

Ho scoperto che anche io sono abbastanza smemorata :-) ... Ho appena controllato il nostro server stamattina e ho impostato un'attività pianificata che viene eseguita ogni sabato sera alle 23:30 e gestisce una linea 2 script batch: 'del/F/S/Q" C: \ Documents and Settings \ TFSSERVICE \ Impostazioni locali \ Temp \ *. * "' 'del/F/S/Q" C: \ WINDOWS \ Temp \ *. * "' –

+0

Abbiamo riscontrato questo problema quando i nostri progetti di installazione di vdproj hanno avuto esito negativo sul server di generazione TFS 2010. Devenv tenta di creare file temporanei durante la creazione dell'MSI. Ho trovato questo inconveniente solo avviando VS e creando un nuovo progetto MSI/vdproj (sul server di build), mentre allo stesso tempo usavo ProcMon e successivamente ho notato una grande quantità di risultati di * NAME COLLISION * su operazioni CreateFile nel AppData del servizio di compilazione Cartella \ Local \ Temp. Cancellare ora ... –

Problemi correlati