2016-05-04 10 views
7

Czy istnieje dowolna zmienna wbudowana, która umożliwia dostęp do tekstu aktualnie wykonywanego kompilatora?Plik dziennika Jenkinsfile

Próbowałem użyć czegoś takiego jak currentBuild.log, currentBuild.buildLog, ale bez powodzenia.

Odpowiedz

2

Właściwie jest to możliwe przy użyciu currentBuild.rawBuild.log lub lepsza (nie przestarzałe) currentBuild.rawBuild.getLog(100) (dla ostatnich 100 linii), odniesienie: http://javadoc.jenkins-ci.org/hudson/model/Run.html#getLog-int-

+1

Z potokiem 1,652, który nie działa :(org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Skrypty nie mogą używać metody hudson.model.Run getLog int' & the my.jenkins.site/scriptApproval/ strona nawet tego nie pokazuje, wciąż szukam odpowiedzi na ten dokuczliwy problem –

+0

@JasonDeArte - Czy próbowałeś tego na aktualnym Jenkins LTS z aktualnymi wersjami pluginów? – BitwiseMan

+0

Zajęło mi dużo czasu, aby znaleźć tę odpowiedź. Zapewnia to jeden sposób sprawdzenia, czy kompilacja została przerwana, co nie jest jeszcze jasno określone - https://issues.jenkins-ci.org/browse/JENKINS-28822 –

2

Obecnie nie. (Właściwości currentBuild są udokumentowane pod Snippet Generator »zmienne globalne przy okazji.)

To mógł być realizowane, dość łatwo, choć nie byłoby dobrze skalować z ogromnym buduje. JENKINS-28119 zapewnia bardziej skalowalne rozwiązanie tego, co domyślam się, że jest to podstawowa prośba.

+0

Właściwie próbuję przeanalizować dzienniki w celu pobrania wszystkich wdrożonych artefaktów ('mvn clean deploy') iw przypadku niepowodzenia testów serwera chcę usunąć te artefakty z repozytorium nexus, najłatwiej jest mi teraz przeanalizować dzienniki dla * Uploaded: http ..... * text i wykonaj HTTP DELETE na nich. –

+0

W przypadku wersjonowania wdrożonych artefaktów za pomocą zmiennej, do której można uzyskać dostęp, na przykład numeru kompilacji lub zatwierdzenia git, można je usunąć, budując nazwy artefaktów za pomocą zmiennej. Jeśli publikujesz setki artefaktów, które nie będą działały zbyt dobrze, wystarczy –

+0

Następnie po prostu 'sh 'mvn clean deploy | tee logi "; def logs = readFile 'logs'' bez próby uzyskania dostępu do logów _build_ jako całości. –

3

Szukałem dużo rozwiązania do analizy dziennika.

  • użycie rawBuild nie było OK, bo chcę, aby wykonać swoje skrypty w piaskownicy bez dodatkowych zatwierdzeń
  • korzystanie tee w stopniach, że chcę analizować nie było OK, bo nie chcą modyfikować powyższe czynności, ani nie chcę mieć całe dziennik w pamięci RAM (i niestety musiałem że na komputerze z systemem Windows)

znalazłem rozwiązanie inspirowane przez Jesse Glicks odpowiedź:

  • Pod my.jenkins.url/rurociągu składni/globalne widać, że manager -variable umożliwia analizę dziennika za pomocą manager.logContains(regexp) lub manager.getLogMatcher(regexp)
  • Więc jeśli chcesz tylko sprawdzić, że dziennik zawiera ciąg myTestString można po prostu zadzwonić manager.logContains('.*myTestString.*')
  • Jeśli chcesz uzyskać informacje z pierwszej pasującej linii można użyć manager.getLogMatcher(regexp)

Niestety nie znalazłem sposobu aby przeanalizować cały log (tylko getLogMatcher zwraca pierwszy wiersz pasujący Matcher). Tak więc obecnie nie ma możliwości, aby np. Policz, jak często plik dziennika zawiera specjalny ciąg znaków.