Po pierwsze, najedź myszą na szary obszar poniżej. Nie stanowi części odpowiedzi, ale absolutnie należy powiedzieć:
Jeśli masz skrypt powłoki, który sam wykonuje „pobieranie, budowanie, wdrażanie”, to dlaczego używasz Jenkinsa? Rezygnujesz ze wszystkich funkcji Jenkinsa, które sprawiają, że jest tym, czym jest. Równie dobrze możesz mieć crona lub SVN po zatwierdzeniu, które wywołują skrypt bezpośrednio. Kluczowe znaczenie ma samodzielne sprawdzenie przez Jenkinsa SVN. Pozwala uruchamiać kompilacje tylko wtedy, gdy są zmiany (lub na czas lub ręcznie, jeśli wolisz). Śledzi zmiany między kompilacjami. Pokazuje te zmiany, dzięki czemu możesz zobaczyć, która kompilacja była dla którego zestawu zmian. Wysyła e-maile do osób odpowiedzialnych, gdy ich zmiany spowodowały pomyślną lub nieudaną kompilację (ponownie, zgodnie z preferencjami). Wyśle e-maile do osób odpowiedzialnych za poprawianie błędów kompilacji. I coraz więcej. Archiwizacja przez Jenkinsa artefaktów sprawia, że są one również dostępne dla każdej kompilacji bezpośrednio z Jenkinsa. Chociaż nie jest tak istotny jak płatność SVN, jest to ponownie integralna część tego, co sprawia, że jest to Jenkins. To samo z wdrażaniem. Jeśli nie masz jednego środowiska, wdrażanie zwykle odbywa się w wielu środowiskach. Jenkins może śledzić, w jakim środowisku jest wdrażana określona kompilacja (z określonym zestawem zmian SVN), korzystając z promocji. Zrezygnujesz z tego wszystkiego. Wygląda na to, że powiedziano ci „musisz użyć Jenkinsa”, ale tak naprawdę nie chcesz, a robisz to tylko po to, aby odciągnąć szefów od pleców, tylko po to, by zaznaczyć „tak, użyłem Jenkinsa”
Krótka odpowiedź brzmi: kod zakończenia ostatniego polecenia kroku kompilacji wykonania powłoki Jenkin jest tym, co określa powodzenie / niepowodzenie kroku kompilacji . 0
- sukces, anything else
- porażka. Należy zauważyć, że jest to określenie sukcesu / niepowodzenia etapu kompilacji , a nie całego przebiegu zadania . Na powodzenie / niepowodzenie całego przebiegu zadania może dodatkowo wpływać wiele kroków kompilacji oraz czynności i wtyczki po kompilacji.
Wspomniałeś Build step 'Execute shell' marked build as failure
, więc skupimy się tylko na jednym kroku budowy. Jeśli krok budowania powłoki Wykonaj zawiera tylko jedną linię, która wywołuje skrypt powłoki, kod zakończenia skryptu powłoki określi powodzenie / niepowodzenie kroku kompilacji. Jeśli po wykonaniu skryptu powłoki masz więcej wierszy, dokładnie je przejrzyj, ponieważ to one mogą powodować awarię.
Na koniec przeczytaj tutaj Skrypt kompilacji Jenkinsa kończy działanie po wykonaniu testu Google . Nie jest to bezpośrednio związane z twoim pytaniem, ale zwróć uwagę na tę część dotyczącą uruchamiania przez Jenkinsa kroku kompilacji Execute Shell , jako skryptu powłoki z/bin/sh -xe
Te -e
środki, że skrypt będzie opuszczające z niepowodzenia, nawet jeśli tylko 1 komenda nie powiedzie się, nawet jeśli nie sprawdzanie błędów dla tego polecenia (bo wyjść skryptów zanim dojdzie do sprawdzania błędów). Jest to sprzeczne z normalnym wykonywaniem skryptów powłoki, które zwykle wyświetlają komunikat o błędzie dla nieudanego polecenia (lub przekierowują go do wartości null i obsługują w inny sposób) i kontynuują.
Aby to obejść, dodaj set +e
na początku skryptu powłoki.
Ponieważ mówisz, że twój skrypt robi wszystko, co powinien, jest szansa, że niepowodzenie polecenia znajduje się gdzieś na końcu skryptu. Może ostatnie echo? Albo gdzieś kopia artefaktów? Nie widząc pełnego wyniku konsoli, po prostu zgadujemy.
Opublikuj wyjście konsoli uruchomienia zadania, a najlepiej również sam skrypt powłoki, a wtedy możemy powiedzieć dokładnie, która linia nie działa.