2016-02-16 20 views
6

Z moich obserwacji dotyczących działania TeamCity zauważyłem, że warunki niepowodzenia kompilacji są oceniane po wykonaniu wszystkich wykonanych kroków. Jest to dość denerwujące, ponieważ nie mogę wykonać kroku, który nie zostałby wykonany, gdyby wystąpił którykolwiek z warunków kompilacji.Krok TeamCity musi zostać pominięty przy stanie niepowodzenia kompilacji

Nie odwołuję się do typowych warunków niepowodzenia kompilacji, takich jak "co najmniej jeden test nie powiódł się". Mam na myśli ręcznie dodane warunki niepowodzenia, takie jak zmiana metryki.

Kiedy sprawdzam dziennik kompilacji, wyraźnie widzę, że wszystkie kroki są wykonywane, i tylko w końcu oceniają warunki niepowodzenia kompilacji i rejestruje odpowiednie błędy, jeśli są. Ale jest już za późno, ponieważ krok warunkowy (który musiał zakończyć się niepowodzeniem w oparciu o "Wykonaj tylko, jeśli status kompilacji się powiedzie") został już wykonany.

Pytanie: w jaki sposób mogę to osiągnąć?

Jak widać z powyższego, próbowałem już warunkowego kroku i dodano warunek niepowodzenia budowy, ale nie można osiągnąć pożądanego rezultatu.

Dodatek dla jasności:

Zasadniczo mam krok, który instaluje aplikację. Oczekuję jednak, że nie będę wdrażać, jeśli zostaną spełnione warunki niepowodzenia budowy. Przykładem warunków niepowodzenia kompilacji, które mam, jest zmiana metryki. Oczywiście mogę to wyrazić jako warunek niepowodzenia kompilacji i mogę mieć krok kompilacji, który się nie powiedzie w przypadku, gdy stan kompilacji nie powiedzie się. Jednak wygląda na to, że nie będzie postępował krok budowania, więc jestem zdziwiony (myślałem, że to jest celem warunku na etapie kompilacji). czego mi brakuje?

Odpowiedz

0

Jest tak, ponieważ warunki niepowodzenia kompilacji są sprawdzane po ukończeniu wszystkich kroków kompilacji. Ma to sens, ponieważ w przypadku takiego warunku, jak zmiana metryki, należy poczekać na ukończenie kompilacji, tzn. Nie można wziąć pod uwagę rozmiaru artefaktów, ani szukać konkretnego tekstu w dziennikach lub czymś podobnym, dopóki kompilacja nie zostanie ukończona.

To powiedziane - dla twojej sprawy powinieneś rozważyć napisanie kroków kompilacji, które kończą się z niezerowym kodem wyjścia w razie awarii, a następnie możesz użyć opcji If all previous steps finished successfully w Execute step z build step.

+0

A więc sugerujesz, że krok z jednostkowymi testami powinien zakończyć się z niezerowym kodem w przypadku, gdy warunki niepowodzenia kompilacji są spełnione? ale jak mogę powiedzieć krok, aby zwrócić niezerowy kod na podstawie warunków awarii kompilacji? – Tengiz

+0

Nie na podstawie warunków niepowodzenia kompilacji - jeśli przeprowadzane są testy jednostkowe i test jednostkowy kończy się niepowodzeniem, etap, który przeprowadza testy jednostkowe, powinien zwrócić niezerowy kod wyjścia. Może być trochę więcej informacji na temat tego, w jaki sposób przeprowadzanie testów jednostkowych będzie pomocne. Na przykład, jeśli używasz wtyczki NUnit zespołu Teamcity do uruchamiania testów Nunit, to kończy się z niezerowym kodem wyjścia, jeśli test się nie powiedzie –

+0

Dostałem twój punkt. Ale testy jednostkowe nie kończą się niepowodzeniem, tylko warunek niepowodzenia budowy jest prawdziwy. Oznacza to: wszystkie testy jednostkowe przeszły, ale zasięg spadł o N procent. Mam warunek niepowodzenia kompilacji, który sprawdza, czy pokrycie spadło, a jeśli spadnie, to kompilacja zostanie oznaczona jako nieudana. Testy jednostkowe nie zawodzą. Pod koniec kompilacji jest oznaczony jako nieudany, więc warunek niepowodzenia budowy działa dobrze. Muszę pominąć ostatni krok (wdrożenie), jeśli zasięg spadnie (oznacza to, że warunek niepowodzenia budowy jest spełniony). – Tengiz

Powiązane problemy