2012-03-27 8 views
6

Utilizziamo le build automatizzate dell'integrazione continua TFS 2010 che vengono avviate a ogni check-in. Recentemente ho cambiato il modello di processo per creare Debug e Release in parallelo su diversi build agent anziché sequenzialmente sullo stesso agent.Dopo il passaggio alla creazione di sapori diversi in parallelo, vediamo intermittentemente errori di compilazione dovuti a errore CreaLabel

Da allora in poi, stiamo assistendo a un errore di compilazione a causa del seguente errore. Succede abbastanza spesso che è inaccettabile (ogni 5 ° -10 ° build o giù di lì).

"TF203059: L'etichetta esiste già Retry il comando con un diverso nome di etichetta."

non sono stato in grado di capire un modello specifico che causa questo accada. Qualcuno si è imbattuto in questo prima? C'è una modifica che dovrebbe essere apportata all'attività Crea etichetta nel processo di creazione?

+0

Questo dipende in larga misura da come è stato personalizzato il modello di processo di costruzione. Puoi descrivere un po 'più da vicino come lo hai impostato? – pantelif

+0

Ciao pantelif, grazie per la tua risposta. Ho usato il modello di processo di creazione condiviso qui come esempio: http://blogs.msdn.com/b/jimlamb/archive/2010/09/14/parallelized-builds-with-tfs2010.aspx – LiliaP

+0

Altri dettagli: ho aggiunto un flusso di controllo ParallelForEach alla sequenza del processo di build e ha disposto l'intero blocco RunOnAgent al suo interno. L'attività CreateLabel faceva parte del blocco RunOnAgent e ora viene eseguita per ogni aspetto della build. L'etichetta viene impostata sul numero di build che è nel formato $ (Data: aaaa.MM.dd) $ (Rev: .rr). Di conseguenza sia il debug che il rilascio useranno la stessa etichetta. Questo non causa problemi la maggior parte delle volte, ma otteniamo errori di compilazione intermittenti – LiliaP

risposta

1

Ci sono un paio di problemi che possono derivare dalla parallelizzazione. Le etichette sono una, e la modifica degli oggetti di lavoro è la seconda. Potrebbero essercene di più, ma è quello che ho incontrato. Se ti sposti entrambi nella parte con un solo thread, dovrebbe risolvere i tuoi problemi. Tuttavia, questo spesso viene fornito con una serie di problemi. IIRC, l'etichettatura richiede di mappare lo spazio di lavoro e ottenere l'ultima possibile prima di poter etichettare, quindi se si dispone di molti file, ciò può mitigare i vantaggi in termini di prestazioni della parallelizzazione. Per gli elementi di lavoro, il problema può verificarsi perché un processo modifica l'elemento di lavoro dopo che un altro ramo lo ha letto e TFS lancia un adattamento che è stato modificato in modo che non possa essere aggiornato.

+0

Rob - grazie mille per la tua risposta! Sono stato fuori dal paese e sono appena tornato a questo progetto.La nostra soluzione non è così grande, quindi ottenere le ultime non ci vorrà molto. – LiliaP

+0

Rob: una domanda sulla soluzione a questo problema: come hai spostato l'etichettatura nella parte a thread singolo? Hai ottenuto questo risultato modificando il modello nell'interfaccia utente di modifica del processo di sviluppo di Visual Studio o hai implementato una soluzione personalizzata? – LiliaP

+0

È passato un po 'di tempo, ma penso di averlo spostato nella parte a thread singolo modificando il flusso di lavoro –

0

In caso di versioni parallele per configurazioni "Debug" e "Rilascio". Prova a mettere la stessa etichetta due volte, quindi può creare problemi. in particolare, dobbiamo fornire quell'etichetta solo una volta. Quindi, in questo caso per evitare tale problema, possiamo mettere una condizione per entrambe le configurazioni per mettere l'etichetta e saltare l'etichetta dando la seconda configurazione.

uso questo se condizione:

se (configurazione = "Release") Poi (createLabel) altro [Devi lasciare questo vuoto per il debug, come abbiamo già previsto che l'etichetta una volta per " Release "condition"

In questo modo ho risolto il problema relativo al problema dell'etichetta duplicata.

"TF203059: L'etichetta esiste già Riprovare il comando con un diverso nome di etichetta."

spero che funzionerà anche per voi perfettamente bene per parallelo costruisce.

Problemi correlati