Jak zatrzymać niepowstrzymaną pracę zombie na Jenkins bez ponownego uruchamiania serwera?


178

Nasz serwer Jenkins ma zadanie, które działa od trzech dni, ale nic nie robi. Kliknięcie małego X w rogu nic nie robi, a dziennik wyjściowy konsoli również nic nie pokazuje. Sprawdziłem na naszych serwerach kompilacji i wygląda na to, że zadanie w ogóle nie działa.

Czy istnieje sposób, aby powiedzieć Jenkinsowi, że praca została „wykonana”, edytując plik, blokadę lub coś w tym rodzaju? Ponieważ mamy dużo zadań, tak naprawdę nie chcemy restartować serwera.


1
Wydaje się, że w najnowszych wersjach Jenkinsa rozwiązanie nie jest tym, które zostało oznaczone jako zaakceptowane. (ale ten z '16)
NicolasW

Odpowiedzi:


213

Idź do "Manage Jenkins"> "Script Console", aby uruchomić skrypt na serwerze i przerwać zawieszony wątek.

Możesz pobrać wszystkie wątki na żywo Thread.getAllStackTraces()i przerwać ten, który się zawiesił.

Thread.getAllStackTraces().keySet().each() {
  t -> if (t.getName()=="YOUR THREAD NAME" ) {   t.interrupt();  }
}

AKTUALIZACJA:

Powyższe rozwiązanie wykorzystujące wątki może nie działać na nowszych wersjach Jenkinsa. Aby przerwać zamrożone rurociągi, odwołaj się do tego rozwiązania (autorstwa alexandru-bantiuc ) i uruchom:

Jenkins.instance.getItemByFullName("JobName")
                .getBuildByNumber(JobNumber)
                .finish(
                        hudson.model.Result.ABORTED,
                        new java.io.IOException("Aborting build")
                );

48
Działało świetnie! Dla każdego, kto czyta, możesz wyświetlić nazwy wątków, najpierw uruchamiając powyższe, z metodą wywołującąt -> println(t.getName());
Phil

2
Nadal nie działa również ze skryptem powyżej, pobiera skrypty, ale nie zabija tego samego.
Raghav S

2
czy możesz wydrukować nazwę konkretnego wątku po dopasowaniu nazwy w t.getName()=="SOME NAME"?
Zahra

3
Mnie to też nie pomaga - wątek nie reaguje na przerwanie ().
Zitrax

2
dla mnie przerwa nie wystarczyła, t.stopzamiast tego musiałem zadzwonić :Thread.getAllStackTraces().keySet().each() { t -> if (t.getName()=="YOUR THREAD NAME" ) { println(“Found, stopping now… “); t.stop(); } }
piątek

258

Miałem też ten sam problem i naprawiłem go przez Jenkins Console.

Przejdź do „Manage Jenkins”> „Script Console” i uruchom skrypt:

 Jenkins .instance.getItemByFullName("JobName")
        .getBuildByNumber(JobNumber)
        .finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build")); 

Musisz tylko określić JobName i JobNumber.


Miałem to z pracą na rurociągu, która rozpoczęła inne prace. Serwer się zawiesił, inne zadania zniknęły, ale zadanie potoku nadal było zombie. Najpierw spróbowałem zaakceptowanej odpowiedzi, ale bezskutecznie. Musiałem kilkakrotnie uruchomić polecenie @ Alexandru, za każdym razem, gdy widziałem, jak pasek postępu zadania potoku trochę się porusza. W końcu praca rurociągu umarła i na dobre środki również ją usunąłem.
Amedee Van Gasse

18
Działa to świetnie również w przypadku projektów wielobranżowych, ale kluczem jest określenie JobName jako Jenkins.instance.getItemByFullName ("<project-name> / <branch-name>")
evasilchenko

22
Ta odpowiedź pomogła mi rozwiązać problem. Rurociąg był totalnym zombie. Powyższy skrypt nie zadziałał, a potok nadal działał nawet po kilku ponownych uruchomieniach Jenkinsa. Przeczytałem wewnętrzną dokumentację klasy i znalazłem metodę delete (), więc mój skrypt wyglądał następująco: Jenkins.instance.getItemByFullName("JobName").getBuildByNumber(JobNumber).delete();po wykonaniu tego i siebie nawzajem, Jenkins zrestartował, kompilacja zombie w końcu zniknęła.
Szymon Sadło

5
Nie ma metody finishw AbstractBuild ani FreeSyleBuild ani MavenModulesetBuild
Jakub Bocheńskiego

3
Mam problem podczas wykonywania tego skryptu, jakiś pomysł? groovy.lang.MissingMethodException: No signature of method: hudson.model.FreeStyleBuild.finish() is applicable for argument types: (hudson.model.Result, java.io.IOException) values: [ABORTED, java.io.IOException: Aborting build] Possible solutions: find(), findAll(), find(groovy.lang.Closure) at
Tien Dung Tran

31

Jeśli masz Multibranch Pipeline -job (a jesteś administratorem Jenkinsa), użyj w konsoli skryptów Jenkins tego skryptu:

Jenkins.instance
.getItemByFullName("<JOB NAME>")
.getBranch("<BRANCH NAME>")
.getBuildByNumber(<BUILD NUMBER>)
.finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));

Z https://issues.jenkins-ci.org/browse/JENKINS-43020

Jeśli nie masz pewności, jaka jest pełna nazwa (ścieżka) zadania, możesz użyć następującego fragmentu kodu, aby wyświetlić pełną nazwę wszystkich elementów:

  Jenkins.instance.getAllItems(AbstractItem.class).each {
    println(it.fullName)
  };

Od https://support.cloudbees.com/hc/en-us/articles/226941767-Groovy-to-list-all-jobs


uwaga dodatkowa: jeśli korzystasz z SVN (i przestrzegasz standardowych konwencji), Twoja <NAZWA ODDZIAŁU> będzie wyglądać jak oddziały / moja_ gałąź
tvt173

25

Do tego zadania używam wtyczki Monitoring . Po instalacji wtyczki

  1. Przejdź do Manage Jenkins> Monitoring of Hudson / Jenkins master
  2. Rozwiń szczegóły wątków, mały niebieski link po prawej stronie
  3. Wyszukaj zawieszoną nazwę stanowiska

    Nazwa wątku zaczyna się w ten sposób

    Executor #2 for master : executing <your-job-name> #<build-number>

  4. Kliknij czerwony, okrągły przycisk po prawej stronie w tabeli wiersza, w którym znajduje się Twoja wybrana praca


3
Mówi, że zabity, ale ponownie, kiedy odświeżamy stronę, wątek wydaje się żywy
Raghav S

Ciekawy. Rzucę okiem na to. Prawdopodobnie zależy to od wersji. Jeśli uruchomiłeś zewnętrzne procesy, prawdopodobnie przez rozszerzenia ANT lub Maven, może to się nie powieść.
cheffe

To rozwiązanie, które mi się sprawdziło. Właśnie wszedłem na listę wątków, wyszukałem nazwę pracy i kliknąłem czerwony przycisk. jenkinsServer / monitoring # wątków
Gilberto Treviño

24

Kiedyś napotkałem kompilację, której nie można zatrzymać za pomocą „konsoli skryptów”. W końcu rozwiązałem problem, wykonując następujące czynności:

ssh onto the jenkins server
cd to .jenkins/jobs/<job-name>/builds/
rm -rf <build-number>
restart jenkins

to faktycznie pomogło w moim przypadku: zadanie już nie istniało w momencie zabijania go przez konsolę (zadanie dynamicznego potoku, usunięto gałąź funkcji)
mkko

24

Pierwsze proponowane rozwiązanie jest dość bliskie. Jeśli użyjesz stop () zamiast przerywania (), zabije to nawet uciekające wątki, które działają bez końca w groovym skrypcie systemowym. To zabije każdą kompilację, która działa do pracy. Oto kod:

Thread.getAllStackTraces().keySet().each() {
    if (it.name.contains('YOUR JOBNAME')) {  
      println "Stopping $it.name"
      it.stop()
    }
}

4
IMO to powinna być akceptowana odpowiedź. Wszystkie inne odpowiedzi nie działały dla mnie, ponieważ kompilacja była już w stanie przerwania, ale zawieszała się w jakimś kroku po kompilacji. Tylko to rozwiązanie naprawdę zatrzymało kompilację
Kutzi

1
Używanie containstutaj jest niepoprawne i niebezpieczne - jeśli nazwa twojego zadania to „Uruchom testy”, zabije również wszystkie zadania o nazwie „Uruchom testy - integracja”, „Uruchom testy - jednostka” itp. Każdy, kto korzysta z tej funkcji, będzie musiał uważać, aby tego nie robić nieoczekiwanie zakończyć niepowiązane prace
Brandon

13

Jeśli masz niepowstrzymane zadanie Pipeline, wypróbuj następujące rozwiązania:

  1. Przerwij zadanie, klikając czerwony X obok paska postępu budowy
  2. Kliknij „Wstrzymaj / wznów” na kompilacji, aby wstrzymać
  3. Kliknij ponownie „Wstrzymaj / wznów”, aby wznowić kompilację

Wstrzymaj / wznów zadanie potoku

Jenkins zda sobie sprawę, że zadanie powinno zostać zakończone i zatrzyma kompilację


8
Nie mam tej pozycji menu.
papaiatis

13

Bez konieczności korzystania z konsoli skryptu lub dodatkowych wtyczek, można po prostu przerwanie kompilacji wpisując /stop, /termlub/kill po kompilacji URL w przeglądarce.

Cytując dosłownie z powyższego linku:

Zadania potoku można zatrzymać, wysyłając żądanie HTTP POST do punktów końcowych adresu URL kompilacji.

  • <BUILD ID URL> / stop - przerywa potok.
  • <BUILD ID URL> / term - wymusza zakończenie budowania (powinno być używane tylko wtedy, gdy stop nie działa.
  • <BUILD ID URL> / kill - twarde zabicie potoku. Jest to najbardziej destrukcyjny sposób zatrzymania rurociągu i powinien być stosowany tylko w ostateczności.

7

Wtyczka Build-Timeout może się przydać w takich przypadkach. Jeśli zajmie to zbyt dużo czasu, automatycznie zabije zadanie.


1
Niestety nie jest to opcja dla nas, ponieważ mamy kilka zadań, które mają działać przez kilka dni (nie pytajcie)
blokkie

7
Konfigurujesz limity czasu kompilacji na podstawie zadania.
Draco Ater

1
Nie, mamy budować zatrzymany przez ponad 3 godziny z zestawem limitu czasu do 95 minut nie sądzę plugin Timeout może pomóc jak to robi to samo co kliknięcie „Abort” ręcznie
Jakub Bocheński

7

Myślę, że jest już za późno, aby odpowiedzieć, ale moja pomoc niektórym ludziom.

  1. Zainstaluj wtyczkę monitorującą. ( http://wiki.jenkins-ci.org/display/JENKINS/Monitoring )
  2. Przejdź do jenkinsUrl / monitoring / nodes
  3. Przejdź do sekcji Wątki na dole
  4. Kliknij przycisk szczegółów po lewej stronie wzorca
  5. Sortuj według czasu użytkownika (ms)
  6. Następnie spójrz na nazwę wątku, będziesz mieć nazwę i numer kompilacji
  7. Zabij to

Nie mam wystarczającej reputacji, aby publikować zdjęcia.

Mam nadzieję, że to pomoże


1
Nie pomagam, mówi zabity. ale znowu, gdy strona się przeładowuje, widzę ten wątek
Raghav S,

Czy zabijasz wątek kompilacji czy wątek podrzędny kompilacji? Jak nazywa się ten wątek? Chyba nie zabijesz tego dobrego. Jeśli zabijesz wątek kompilacji, zobaczysz, że kompilacja zakończyła się pomyślnie.
Simon

2
Próbowałem zabić wątek, który jest powiązany z numerem wykonawcy slave'a, który również miał nazwę zadania. Znalazłem również kilka innych wątków związanych z obsługą GET, a zawarte w nich informacje dotyczyły Subversion. Zabicie obu też nie pomogło. W końcu pomogło mi ponowne uruchomienie. Jeszcze jedna obserwacja była taka, że ​​inne wątki bez powiązania z SVN można było zabić.
Raghav S

Ta odpowiedź jest kopią odpowiedzi @cheffe, która została opublikowana miesiąc wcześniej.
t0r0X

6

Top odpowiedź niemal pracował dla mnie, ale miałem jeden poważny problem: Miałem bardzo dużą liczbę (~ 100) miejsc pracy zombie ze względu na szczególnie słabo timed Jenkins restarcie, więc ręcznie znalezienie nazwę stanowiska i numer kompilacji każdego i każda praca zombie, a potem ręczne zabicie ich było niewykonalne. Oto jak automatycznie znalazłem i zabiłem zadania zombie:

Jenkins.instance.getItemByFullName(multibranchPipelineProjectName).getItems().each { repository->
  repository.getItems().each { branch->
    branch.builds.each { build->
      if (build.getResult().equals(null)) {
        build.doKill()
      }
    }
  }
}

Ten skrypt przegląda wszystkie kompilacje wszystkich zadań i używa go getResult().equals(null)do określenia, czy zadanie zostało zakończone. Kompilacja, która znajduje się w kolejce, ale nie została jeszcze uruchomiona, nie zostanie poddana iteracji (ponieważ tej kompilacji nie będzie job.builds), a ukończona już kompilacja zwróci coś innego niż nullfor build.getResult(). Legalnie działająca praca będzie również miała wynik kompilacjinull , więc przed uruchomieniem tego upewnij się, że nie masz uruchomionych zadań, których nie chcesz zabijać.

Wiele zagnieżdżonych pętli jest głównie niezbędnych do odkrycia każdej gałęzi / PR dla każdego repozytorium w projekcie Multibranch Pipeline; jeśli nie używasz potoków wielobranżowych, możesz po prostu zapętlić wszystkie swoje zadania bezpośrednio za pomocą czegoś takiego jak Jenkins.instance.getItems().each.


3
Nieznacznie poprawiłem twój skrypt. runningBuilds = Jenkins.instance.getView('All').getBuilds().findAll() { it.getResult().equals(null) } runningBuilds.each { branch->branch.doKill() }
Tobi

5

Sprawdziłem źródło Jenkinsa i wydaje się, że to, co próbuję zrobić, jest niemożliwe, ponieważ wydaje się, że zatrzymanie pracy jest wykonywane przez przerwanie wątku. Nie mam pojęcia, dlaczego praca się wisi ..

Edytować:

Możliwe przyczyny niepowstrzymanej pracy:

  • jeśli Jenkins utknie w nieskończonej pętli, nigdy nie można jej przerwać.
  • jeśli Jenkins wykonuje operacje we / wy sieci lub plików w maszynie wirtualnej Java (np. długotrwałe kopiowanie plików lub aktualizacja SVN), nie można tego przerwać.

To właściwie nie jest niemożliwe. Możesz użyć konsoli skryptów Jenkinsa, aby przerwać wątek, w którym działa Twoje zadanie. Zobacz wyjaśnienie tutaj: stackoverflow.com/a/26306081/1434041
Zahra

3

W takich przypadkach zwykle używam jenkins-cli. Możesz pobrać jar ze strony http://your-jenkins-host:PORT/cli. Następnie uruchomić

java -jar jenkins-cli.jar delete-builds name_of_job_to_delete hanging_job_number

Informacje pomocnicze:

Możesz także przekazać szereg kompilacji, takich jak 350:400. Ogólna pomoc dostępna przez bieganie

java -jar jenkins-cli.jar help

Kontekst poleceń pomoc dla delete-buildso

java -jar jenkins-cli.jar delete-builds

3

Odpowiedź Alexandru Bantiuca działała dobrze, gdy zatrzymałem kompilację, ale moi wykonawcy nadal byli zajęci. Byłem w stanie wyczyścić status zajętości executora za pomocą następujących poleceń

server_name_pattern = /your-servers-[1-5]/
jenkins.model.Jenkins.instance.getComputers().each { computer ->
  if (computer.getName().find(server_name_pattern)) {
    println computer.getName()
    execList = computer.getExecutors()      
    for( exec in execList ) {
      busyState = exec.isBusy() ? ' busy' : ' idle'
      println '--' + exec.getDisplayName() + busyState
      if (exec.isBusy()) {
        exec.interrupt()
      }
    }
  }
}

3

Wystąpił ten sam problem, ale nie było wątku stosu. Usunęliśmy zadanie, używając tego fragmentu kodu w konsoli Jenkins. Zastąp nazwę stanowiska i numer budynku swoim.

def jobname = "Main/FolderName/BuildDefinition"
def buildnum = 6
Jenkins.instance.getItemByFullName(jobname).getBuildByNumber(buildnum).delete(); 

1
To nie działa! Usunie tylko kompilację z widoku, pozostawiając działający proces i wszystkie zasoby zablokowane
Jakub Bochenski

3

Niedawno natknąłem się na węzeł / agenta, w którym jeden wykonawca był zajęty przez kilka dni kompilacją „X” zadania potoku, chociaż strona z zadaniami twierdziła, że ​​kompilacja „X” już nie istnieje (została odrzucona po 10 kolejnych kompilacjach (!), Ponieważ skonfigurowane w zadaniu potoku). Zweryfikowano, że na dysku: kompilacja „X” naprawdę zniknęła.

Rozwiązanie: to agent / węzeł błędnie zgłosił, że zajęty executor był zajęty wykonywaniem kompilacji „X”. Przerwanie wątku tego executora natychmiast go zwolniło.

def executor = Jenkins.instance.getNode('NODENAME').computer.executors.find {
    it.isBusy() && it.name.contains('JOBNAME')
}

println executor?.name
if (executor?.isBusy()) executor.interrupt()

Uwzględniono inne odpowiedzi:

  • Odpowiedź od @cheffe: nie działa (zobacz następny punkt i zaktualizuj poniżej).
  • Odpowiedzi z Thread.getAllStackTraces() : brak pasującego wątku.
  • Odpowiedź od @ levente-holló i wszystkie odpowiedzi z getBuildByNumber() : nie mają zastosowania, ponieważ kompilacji już nie było!
  • Odpowiedź od @austinfromboston: była bliska moim potrzebom, ale spowodowałaby również zniszczenie wszystkich innych uruchomionych w tej chwili kompilacji.

Aktualizacja:
Ponownie doświadczyłem podobnej sytuacji, w której Executor był zajęty przez wiele dni (wciąż istniejącą) ukończoną budową rurociągu. Ten fragment kodu był jedynym działającym rozwiązaniem.


To mi wystarczyło, dzięki! Inne rozwiązania nie działały, ponieważ numer kompilacji został już wyrzucony (po prostu zachowujemy ostatnie 5 kompilacji, więc job.getBuildByNumber (...) nic nie zwrócił).
L. Tischler

2

Miałem ten sam problem przez ostatnie pół godziny ...

Nie udało się usunąć kompilacji zombie działającej w moim potoku wielooddziałowym. Nawet serwer restartował się przez interfejs użytkownika, a nawet z wiersza poleceń, sudo service jenkins restart blokował wykonanie ... Budowanie nie dało się zatrzymać ... Zawsze się powtarzało.

Używana wersja: Jenkins ver 2.150.2

Byłem bardzo zirytowany, ale ... przeglądając dziennik kompilacji, znalazłem coś ciekawego na końcu dziennika:

Plik dziennika wyjścia kompilacji zombie i pokazujący restart nie zatrzymał go

Części zaznaczone na czerwono to „frustrujące części” ... Jak widać, zawsze chciałem przerwać kompilację z interfejsu użytkownika, ale to nie działało ...

Ale jest hiperłącze z tekstem Click here to forcibly terminate running steps... (pierwszy zielony) Teraz nacisnąłem link ...) Po uruchomieniu linku Still pausedpojawił się komunikat o kolejnym LinkClick here to forcibily kill entire build (drugi zielony) Po wciśnięciu tego linku również budowanie w końcu było trudne zabity...

Wydaje się więc, że działa to bez żadnych specjalnych wtyczek (z wyjątkiem samej wtyczki kompilacji multibranch-pipeline).


Jeśli podasz link, do którego „Kliknij tutaj, aby wymusić zabicie całej kompilacji”, zagłosowałbym za tym, ponieważ to zadziała. Niestety to rozwiązanie nie działa, ponieważ Jenkins nie wyświetla najnowszych dzienników, ponieważ plik dziennika ma kilka GB.
mjaggard

Przepraszamy, obecnie nie mam już dostępu do tych dzienników. Jeśli znowu mam tę awarię to dodam komentarz jej / aktualizacja rozwiązania. Ale co z logowaniem się do maszyny Jenkins i po prostu użyj przeglądarki taillub dziennika, aby uzyskać link?
de-jcup

3
To zadziałało dla mnie, dzięki! @mjaggard: Link to:<a href="#" onclick="new Ajax.Request('[server]/jenkins/job/[pipeline_name]/[job_number]/kill'); return false">Click here to forcibly kill entire build</a>
kaveish

1

Miałem wiele zadań zombi, więc użyłem następującego skryptu:

for(int x = 1000; x < 1813; x = x + 1) {
    Jenkins .instance.getItemByFullName("JOBNAME/BRANCH")
    .getBuildByNumber(x)
    .finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"))
}

1

To działa dla mnie za każdym razem:

Thread.getAllStackTraces().keySet().each() {
if (it.name.contains('YOUR JOBNAME')) {  
  println "Stopping $it.name"
  it.stop()
}

Dzięki funql.org


0

Dwa razy zdarzyło mi się ten sam problem, jedyną naprawą sofy było ponowne uruchomienie serwera Tomcat i ponowne uruchomienie kompilacji.


0

Narzędzie, które napisałem o nazwie jkillthread, może zostać użyte do zatrzymania dowolnego wątku w dowolnym procesie Java, o ile możesz zalogować się do maszyny z uruchomioną usługą na tym samym koncie.


0

BARDZO PROSTE ROZWIĄZANIE

Powodem, dla którego widziałem ten problem, był nieprawidłowy httplink na stronie zamiast tego, httpsktóry powinien zatrzymać pracę. Wszystko, co musisz zrobić, to edytować onclickatrybut na stronie html, wykonując następujące czynności

  1. Otwórz dziennik konsoli zadania (potoku), które się zawiesiło
  2. Kliknij wszystko, co jest dostępne, aby zabić zadanie (ikona x, „Kliknij tutaj, aby wymusić zakończenie wykonywania kroków” itp.), Aby wyświetlić link „Kliknij tutaj, aby wymusić zabicie całej kompilacji” ( NIE jest w tej chwili będzie można go kliknąć)
  3. Otwórz konsolę przeglądarki ( użyj jednej z trzech dla chrome: F12; ctrl + shift + i; menu-> więcej narzędzi-> narzędzia programistyczne )
  4. Znajdź link „Kliknij tutaj, aby wymusić zabicie całej kompilacji” ręcznie lub za pomocą przycisku „wybierz element na stronie” konsoli
  5. Kliknij dwukrotnie onclick atrybut, aby edytować jego wartość
  6. Dołącz sdo httpmiećhttps
  7. Naciśnij klawisz Enter, aby przesłać zmiany
  8. Kliknij link „Kliknij tutaj, aby wymusić zabicie całej kompilacji”

Użyj zrzutu ekranu w celach informacyjnych wprowadź opis obrazu tutaj


0

Używając konsoli Script pod adresem https: // my-jenkins / script

import hudson.model.Job
import org.jenkinsci.plugins.workflow.job.WorkflowRun

Collection<Job> jobs = Jenkins.instance.getItem('My-Folder').getAllJobs()
for (int i = 0; i < jobs.size(); i++) {
  def job = jobs[i]
  for (int j = 0; j < job.builds.size(); j++) {
    WorkflowRun build = job.builds[j]
    if (build.isBuilding()) {
      println("Stopping $job ${build.number}")
      build.setResult(Result.FAILURE)
    }
  }
}

0

Żadne z tych rozwiązań nie działało dla mnie. Musiałem zrestartować komputer, na którym został zainstalowany serwer. Nie można już zabić pracy.


-1

Możesz po prostu skopiować zadanie i usunąć stare. Jeśli nie ma znaczenia, że ​​utraciłeś stare dzienniki kompilacji.


-2

Oto jak rozwiązałem ten problem w wersji 2.100z Blue Ocean

  • Jedyne wtyczki, które zainstalowałem, są przeznaczone dla bitbucketa.
  • Mam tylko jeden węzeł.

sshdo mojego Jenkinsa
cd ~/.jenkins(gdzie trzymam Jenkinsa )
cd job/<job_name>/branches/<problem_branch_name>/builds
rm -rf <build_number>

Następnie możesz opcjonalnie zmienić numer w nextBuildNumber(zrobiłem to).

Wreszcie zrestartowałem jenkins ( brew services restart jenkins). Ten krok będzie oczywiście inny w zależności od tego, jak zarządzasz i instalujesz Jenkins.


-3

Wejdź do interfejsu użytkownika błękitnego oceanu. Spróbuj od tego momentu zatrzymać pracę.


Co to znaczy? Mój serwer Jenkins nie ma takiego interfejsu użytkownika
Nico Haase

Blue ocean to bardzo popularna wtyczka Jenkinsa, o której możesz przeczytać tutaj .
user3360767

Czy to faktycznie przerywa pracę w inny sposób niż klasyczny interfejs użytkownika? Wydaje się wątpliwe.
StockB
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.