2016-02-01 15 views
8

Questo errore si verifica a volte, in genere questo passaggio funziona correttamente, ma in circa il 10% dei casi non riesce con il messaggio seguente.Il passaggio del programma di installazione di TeamCity NuGet non riesce

Il passaggio del programma di installazione di Nuget è il primo passo di creazione e anche "clean checkout" è abilitato in TeamCity, quindi non dovrebbe esserci alcun processo che utilizza il file.

[ripristinare] Il processo non può accedere al file 'C: \ BuildAgent \ lavoro ... \ packages \ Microsoft.Bcl.Build.1.0.21 \ Microsoft.Bcl.Build.1.0.21.nupkg' perché viene utilizzato da un altro processo.

[ripristinare] processo è terminato con il codice 1

risposta

6

Causa principale di "mio file è utilizzato da un altro processo"

Ci sono diverse cose che si possono fare, a seconda di ciò che è la causa principale:

  • È usa la funzione di costruzione parallela di MSBuild: Secondo il suo blog, sembra non funzionare bene con il ripristino del pacchetto NuGet, perché potrebbe eseguire il ripristino del pacchetto parallelo per ogni progetto (e se diversi progetti richiede Microsoft.Bcl.Build ... Boom!). Disabilitare la generazione parallela o eseguire il ripristino del pacchetto all'esterno della soluzione (in un passaggio della riga di comando). A proposito, non è un good practice to do NuGet restore with solution MSBuild.

  • C'è un altro processo:
    Usa monitor di processo/Explorer per trovare quale processo tenere il blocco sul file. Potrebbe essere un antivirus, uno strumento di indicizzazione dei file, un'istanza di build di build aggiuntiva che continua a essere eseguita in background. Siccome il blocco non è permanente e 1 su 10 è abbastanza per questo tipo di problema, non scommetterei che questa sia la causa principale.

  • Nessun altro processo:
    È un errore nell'installer di Teamcity NuGet che fa qualcosa. Quindi è possibile sostituire il passaggio con un passaggio della riga di comando con una chiamata a nuget restore e verificare se risolve il problema.

  • diagnosticare se stessi con un plugin NuGet di vostro gusto:
    codice NuGet plugin è disponibile here. Significa che puoi compilare una tua versione, con ulteriori informazioni di debug quando si verificano questi tipi di problemi (elenco di processi che bloccano il file, ad esempio). O ancora più utile, puoi aggiungere un nuovo passo nel caso in cui il file sia bloccato.

EDIT: Per chi usa TeamCity su Unix ...

Ho provato ad installare TeamCity su Unix e fare una build in mono con il plugin NuGet. A proposito, il plugin NuGet non funziona affatto su Unix (non è supportato da JetBrains). Ho persino provato a ripararlo ma è stato più facile sostituirlo con una riga di comando.

3

Avete directory di lavoro separata per ogni agente di compilazione? In caso contrario, due build paralleli potrebbero essere eseguite nello stesso momento.

+0

Sì, ho 2 agenti di compilazione cloud AWS EC2, entrambi installati come agenti di compilazione singola, su istanze separate. (+1 per averlo menzionato) – Lev

+1

Bene vorrei usare uno strumento di controllo dei lock come process explorer per determinare chi detiene quel file quando la compilazione fallisce. Ma devi avere accesso a quel server. – mano