2012-03-27 18 views
6

Używamy automatycznych kompilacji TFS 2010 do ciągłej integracji, które są uruchamiane przy każdym odprawie. Niedawno zmieniłem szablon procesu, aby równolegle budować Debugowanie i wydawanie innym agentom kompilacji, a nie sekwencyjnie na tym samym agencie.Po przejściu do budowania różnych smaków równolegle, z przerwami obserwujemy awarie kompilacji spowodowane awarią CreateLabel.

Od tego czasu zauważamy awarię kompilacji z powodu następującego błędu. Zdarza się to na tyle często, że jest nie do przyjęcia (co 5 do 10 budowy).

„TF203059: Etykieta już istnieje Ponów polecenie z inną nazwą etykiety.”

I nie były w stanie dowiedzieć się specyficzny wzór, który powoduje tak się stało. Czy ktoś już kiedyś to widział? Czy należy wprowadzić zmianę w działaniu Utwórz etykietę w procesie kompilacji?

+0

To w dużym stopniu zależy od tego, w jaki sposób dostosowałeś swój szablon procesu kompilacji. Czy możesz opisać trochę bliżej, jak to ustawiłeś? – pantelif

+0

Cześć pantelif, dziękuję za odpowiedź. Użyłem szablonu procesu kompilacji udostępnionego tutaj jako przykładu: http://blogs.msdn.com/b/jimlamb/archive/2010/09/14/parallelized-builds-with-tfs2010.aspx – LiliaP

+0

Jeszcze kilka szczegółów: dodałem przepływ sterowania ParallelForEach do sekwencji procesu budowania i umieścił w nim cały blok RunOnAgent. Czynność CreateLabel była częścią bloku RunOnAgent, więc teraz jest wykonywana dla każdego smaku kompilacji. Etykieta zostanie ustawiona na liczbę kompilacji w formacie $ (Date: yyyy.MM.dd) $ (Rev: .rr). W rezultacie zarówno debugowanie, jak i wydawanie będą korzystać z tej samej etykiety. Nie powoduje to problemów przez większość czasu, ale otrzymujemy przerywane awarie kompilacji. – LiliaP

Odpowiedz

1

Istnieje kilka problemów, które mogą wynikać ze zrównoleglania. Etykiety to jedne, a modyfikowanie elementów pracy to drugie. Może być ich więcej, ale właśnie to napotkałem. Jeśli przeniesiesz oba elementy do pojedynczej części gwintowanej, powinno to rozwiązać problemy. Jednak często wiąże się to z wieloma problemami. IIRC, etykietowanie wymaga zmapowania obszaru roboczego i uzyskania najnowszych informacji przed etykietowaniem, więc jeśli masz dużo plików, może to zmniejszyć korzyści płynące z równoległego działania. W przypadku elementów pracy problem może wystąpić, ponieważ jeden proces modyfikuje element pracy po odczytaniu go przez inną gałąź, a TFS przesuwa dopasowanie, które zostało zmienione, aby nie można było zaktualizować.

+0

Rob - dziękuję bardzo za odpowiedź! Byłem poza krajem i właśnie wróciłem do tego projektu.Nasze rozwiązanie nie jest tak duże, więc uzyskanie najnowszego nie potrwa długo. – LiliaP

+0

Rob - pytanie dotyczące rozwiązania tego problemu: w jaki sposób przeniesiono etykietowanie do części z pojedynczym gwintem? Czy dokonałeś tego poprzez edycję szablonu w edytorze interfejsu Visual Studio Build Process Editing lub czy musisz zaimplementować niestandardowe rozwiązanie? – LiliaP

+0

Minęło trochę czasu, ale myślę, że przeniosłem go z powrotem do części z pojedynczym gwintem, edytując przepływ pracy –

0

W przypadku równoległych kompilacji dla konfiguracji "Debuguj" i "Zwolnij". Próbuje umieścić tę samą etykietę dwukrotnie, więc może powodować problemy. w szczególności musimy podać tę etykietę tylko raz. Tak więc, w tym przypadku, aby tego uniknąć, możemy ustawić warunek dla każdej konfiguracji, aby umieścić etykietę i pominąć etykietę dla drugiej konfiguracji.

wykorzystanie tego czy warunek:

if (konfiguracja = "Release") Następnie (createLabel) inny [Musisz zostawić to pole puste dla Debug jak już pod warunkiem że etykieta raz " Zwolnij "warunek"

W ten sposób rozwiązałem mój problem związany z problemem duplikowania etykiety.

„TF203059: Etykieta już istnieje Ponów polecenie z inną nazwą etykiety.”

Mam nadzieję, że będzie również pracować dla Ciebie perfekcyjnie do równoległego buduje.

Powiązane problemy