Wie kann ich einen unaufhaltsamen Zombie-Job auf Jenkins stoppen, ohne den Server neu zu starten?

177

Unser Jenkins-Server hat einen Job, der seit drei Tagen ausgeführt wird, aber nichts tut. Wenn Sie auf das kleine X in der Ecke klicken, wird nichts ausgeführt, und im Konsolenausgabeprotokoll wird auch nichts angezeigt. Ich habe unsere Build-Server überprüft und der Job scheint überhaupt nicht ausgeführt zu werden.

Gibt es eine Möglichkeit, Jenkins mitzuteilen, dass der Job "erledigt" ist, indem Sie eine Datei oder eine Sperre oder etwas anderes bearbeiten? Da wir viele Jobs haben, möchten wir den Server nicht wirklich neu starten.

Blokkie
quelle
1
Bei neueren Versionen von Jenkins scheint die Lösung nicht die zu sein, die als akzeptiert markiert ist. (aber der von '16)
NicolasW

Antworten:

212

Gehen Sie zu "Jenkins verwalten"> "Skriptkonsole", um ein Skript auf Ihrem Server auszuführen und den hängenden Thread zu unterbrechen.

Sie können alle Live-Threads abrufen Thread.getAllStackTraces()und den hängenden Thread unterbrechen.

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

AKTUALISIEREN:

Die obige Lösung mit Threads funktioniert möglicherweise nicht mit neueren Jenkins-Versionen. Um gefrorene Pipelines zu unterbrechen, beziehen Sie sich stattdessen auf diese Lösung (von alexandru-bantiuc ) und führen Sie Folgendes aus:

Jenkins.instance.getItemByFullName("JobName")
                .getBuildByNumber(JobNumber)
                .finish(
                        hudson.model.Result.ABORTED,
                        new java.io.IOException("Aborting build")
                );
Zahra
quelle
48
Hat super funktioniert! Für jeden, der liest, können Sie die Thread-Namen anzeigen, indem Sie zuerst die oben genannten Methoden ausführen, wobei die Methode aufgerufen wirdt -> println(t.getName());
Phil
2
Es funktioniert immer noch nicht mit dem obigen Skript. Es holt die Skripte, tötet sie aber nicht.
Raghav S
2
Können Sie den Namen des jeweiligen Threads drucken, nachdem Sie den Namen in gefunden haben t.getName()=="SOME NAME"?
Zahra
3
Das hilft mir auch nicht - der Thread reagiert nicht auf den Interrupt ().
Zitrax
2
Für mich war Interrupt nicht genug, ich musste t.stopstattdessen anrufen :Thread.getAllStackTraces().keySet().each() { t -> if (t.getName()=="YOUR THREAD NAME" ) { println(“Found, stopping now… “); t.stop(); } }
Freitag,
258

Ich hatte auch das gleiche Problem und behebte es über Jenkins Console.

Gehen Sie zu "Jenkins verwalten"> "Skriptkonsole" und führen Sie ein Skript aus:

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

Sie müssen nur Ihren Jobnamen und Ihre Jobnummer angeben.

Alexandru Bantiuc
quelle
Ich hatte dies mit einem Pipeline-Job, der andere Jobs startete. Der Server stürzte ab, die anderen Jobs waren weg, aber der Pipeline-Job war immer noch ein Zombie. Ich habe zuerst die akzeptierte Antwort versucht, ohne Erfolg. Ich musste den Befehl von @ Alexandru mehrmals ausführen, jedes Mal, wenn ich sah, dass sich der Fortschrittsbalken des Pipeline-Jobs ein wenig bewegte. Schließlich war der Pipeline-Job gestorben und für gute Maßnahmen habe ich ihn auch gelöscht.
Amedee Van Gasse
18
Dies funktioniert auch gut für Projekte mit mehreren Zweigen, aber der Schlüssel ist, den Jobnamen als Jenkins.instance.getItemByFullName ("<Projektname> / <branch-name>")
anzugeben
22
Diese Antwort half mir, mein Problem zu lösen. Die Pipeline war ein totaler Zombie. Das obige Skript hat nicht funktioniert und die Pipeline lief auch nach einigen Jenkins-Neustarts noch. Ich habe eine interne Klassendokumentation gelesen und eine delete () -Methode gefunden, sodass mein Skript folgendermaßen aussah: Jenkins.instance.getItemByFullName("JobName").getBuildByNumber(JobNumber).delete();Nach dem Ausführen dieser und einer anderen Jenkins-Neustart war der Zombie-Build endgültig verschwunden.
Szymon Sadło
5
Es gibt keine Methode finishin AbstractBuild noch FreeSyleBuild noch MavenModulesetBuild
Jakub Bochenski
3
Ich habe ein Problem beim Ausführen dieses Skripts, eine Idee? 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

Wenn Sie einen Multibranch Pipeline- Job haben (und ein Jenkins-Administrator sind), verwenden Sie in der Jenkins Script Console dieses Skript:

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

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

Wenn Sie sich nicht sicher sind, wie der vollständige Name (Pfad) des Jobs lautet, können Sie das folgende Snippet verwenden, um den vollständigen Namen aller Elemente aufzulisten:

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

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

Markus Schulte
quelle
Randnotiz dazu: Wenn Sie SVN verwenden (und die Standardkonventionen befolgen), ist Ihr <ZWEIGNAME> so etwas wie branchs / my_branch
tvt173
25

Ich benutze das Monitoring Plugin für diese Aufgabe. Nach der Installation des Plugins

  1. Gehen Sie zu Jenkins verwalten> Überwachung des Hudson / Jenkins-Masters
  2. Erweitern Sie die Details der Themen, den kleinen blauen Link auf der rechten Seite
  3. Suchen Sie nach dem Jobnamen, der aufgehängt ist

    Der Name des Threads beginnt so

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

  4. Klicken Sie ganz rechts in der Tabelle der Zeile, die Ihr gewünschter Job hat, auf die rote, runde Schaltfläche

cheffe
quelle
3
Es heißt wie getötet, aber wieder, wenn wir die Seite aktualisieren, scheint der Thread lebendig zu sein
Raghav S
Interessant. Ich werde mir das ansehen. Wahrscheinlich hängt es vom Build ab. Wenn Sie externe Prozesse gestartet haben, wahrscheinlich über ANT- oder Maven-Erweiterungen, schlägt dies möglicherweise fehl.
Cheffe
Dies ist die Lösung, die für mich funktioniert hat. Bin gerade in die Liste der Threads gekommen, habe nach dem Namen des Jobs gesucht und auf den roten Knopf geklickt. jenkinsServer / Monitoring # Threads
Gilberto Treviño
24

Einmal stieß ich auf einen Build, der von der "Script Console" nicht gestoppt werden konnte. Schließlich habe ich das Problem mit folgenden Schritten gelöst:

ssh onto the jenkins server
cd to .jenkins/jobs/<job-name>/builds/
rm -rf <build-number>
restart jenkins
Mugi
quelle
Das hat in meinem Fall tatsächlich geholfen: Der Job war zum Zeitpunkt des
Beendens
24

Die erste vorgeschlagene Lösung ist ziemlich nah. Wenn Sie stop () anstelle von interrupt () verwenden, werden sogar außer Kontrolle geratene Threads beendet, die in einem groovigen Systemskript endlos ausgeführt werden. Dadurch wird jeder Build beendet, der für einen Job ausgeführt wird. Hier ist der Code:

Thread.getAllStackTraces().keySet().each() {
    if (it.name.contains('YOUR JOBNAME')) {  
      println "Stopping $it.name"
      it.stop()
    }
}
funql.org
quelle
4
IMO das sollte die akzeptierte Antwort sein. Alle anderen Antworten haben bei mir nicht funktioniert, da sich der Build bereits in einem unterbrochenen Zustand befand, der jedoch in einem Schritt nach dem Build hängen blieb. Nur diese Lösung hat den Build wirklich gestoppt
Kutzi
1
Die Verwendung containshier ist falsch und gefährlich. Wenn der Name Ihres Jobs "Tests ausführen" lautet, werden auch alle Jobs mit den Namen "Tests ausführen - Integration", "Tests ausführen - Einheit" usw. beendet. Wer dies verwendet, muss darauf achten, dies nicht zu tun Nicht verwandte Jobs unerwartet beenden
Brandon
13

Wenn Sie einen unaufhaltsamen Pipeline-Job haben, versuchen Sie Folgendes:

  1. Brechen Sie den Auftrag ab, indem Sie auf das rote X neben der Fortschrittsanzeige für den Build klicken
  2. Klicken Sie im Build auf "Pause / Fortsetzen", um die Pause anzuhalten
  3. Klicken Sie erneut auf "Pause / Fortsetzen", um den Build fortzusetzen

Pipeline-Job anhalten / fortsetzen

Jenkins wird erkennen, dass der Job beendet werden sollte und stoppt den Build

Levente Holló
quelle
8
Ich habe diesen Menüpunkt nicht.
Papaiatis
13

Ohne die Skript Konsole oder zusätzliche Plugins zu verwenden, können Sie einfach abbrechen Build durch Eingabe /stop, /termoder /killnach der Build - URL in Ihrem Browser.

Wörtlich aus dem obigen Link zitieren:

Pipeline-Jobs können gestoppt werden, indem eine HTTP-POST-Anforderung an URL-Endpunkte eines Builds gesendet wird.

  • <BUILD ID URL> / stop - bricht eine Pipeline ab.
  • <BUILD ID URL> / term - Beendet einen Build zwangsweise (sollte nur verwendet werden, wenn stop nicht funktioniert.
  • <BUILD ID URL> / kill - Töte eine Pipeline hart. Dies ist der zerstörerischste Weg, eine Pipeline zu stoppen, und sollte nur als letzter Ausweg verwendet werden.
Dibakar Aditya
quelle
7

Das Build-Timeout-Plugin kann in solchen Fällen nützlich sein. Der Job wird automatisch beendet, wenn er zu lange dauert.

Draco Ater
quelle
1
Leider ist das keine Option für uns, weil wir ein paar Jobs haben, die tagelang laufen sollen (fragen Sie nicht)
blokkie
7
Sie konfigurieren Build-Timeouts pro Job.
Draco Ater
1
Nein, wir haben einen Build, der länger als 3 Stunden mit einem Timeout von 95 Minuten feststeckt. Ich glaube nicht, dass das Timeout-Plugin helfen kann, da es genauso funktioniert wie das manuelle Klicken auf "Abort"
Jakub Bochenski
7

Ich denke, es ist zu spät, um zu antworten, aber ich helfe einigen Leuten.

  1. Installieren Sie das Überwachungs-Plugin. ( http://wiki.jenkins-ci.org/display/JENKINS/Monitoring )
  2. Gehen Sie zu jenkinsUrl / monitoring / node
  3. Gehen Sie zum Abschnitt Threads unten
  4. Klicken Sie auf die Detailschaltfläche links neben dem Master
  5. Sortieren nach Benutzerzeit (ms)
  6. Schauen Sie sich dann den Namen des Threads an, Sie haben den Namen und die Nummer des Builds
  7. Töte es

Ich habe nicht genug Ruf, um Bilder zu posten, sorry.

Hoffe es kann helfen

Simon
quelle
1
Nicht helfen, heißt es getötet. Aber wieder, wenn die Seite neu geladen wird, kann ich diesen Thread sehen
Raghav S
Beenden Sie den Thread des Builds oder einen Subthread des Builds? Wie heißt dieser Thread? Ich denke du tötest den Guten nicht. Wenn Sie den Thread des Builds beenden, wird der Build erfolgreich abgeschlossen.
Simon
2
Ich habe versucht, den Thread zu beenden, der mit der Executor-Nummer des Slaves verknüpft ist, der auch den Jobnamen hatte. Außerdem habe ich mehrere andere Threads gefunden, die mit dem Umgang mit GET verbunden sind, und die enthaltenen Informationen beziehen sich auf Subversion. Beides zu töten half auch nicht. Endlich hat mir ein Neustart geholfen. Eine weitere Beobachtung war, dass andere Threads ohne SVN-Assoziation tötbar waren.
Raghav S
Diese Antwort ist eine Kopie der Antwort von @cheffe, die einen Monat zuvor veröffentlicht wurde.
t0r0X
6

Die beste Antwort hat fast für mich funktioniert, aber ich hatte ein großes Problem: Ich hatte eine sehr große Anzahl (~ 100) von Zombie-Jobs aufgrund eines besonders zeitlich schlecht abgestimmten Jenkins-Neustarts, also manuell den Jobnamen und die Build-Nummer von jedem und Jeder Zombie-Job und das manuelle Töten war unmöglich. So habe ich die Zombie-Jobs automatisch gefunden und getötet:

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

Dieses Skript durchläuft alle Builds aller Jobs und getResult().equals(null)ermittelt, ob der Job beendet wurde oder nicht. Ein Build, der sich in der Warteschlange befindet, aber noch nicht gestartet wurde, wird nicht wiederholt (da dieser Build nicht vorhanden ist job.builds), und ein Build, der bereits fertig ist, gibt etwas anderes als nullfor zurück build.getResult(). Ein legitim ausgeführter Job hat auch ein Build-Ergebnis von. nullStellen Sie daher sicher, dass Sie keine laufenden Jobs haben, die Sie nicht beenden möchten, bevor Sie diesen ausführen.

Die mehreren verschachtelten Schleifen sind hauptsächlich erforderlich, um jeden Zweig / PR für jedes Repository in einem Multibranch-Pipeline-Projekt zu ermitteln. Wenn Sie keine Multibranch-Pipelines verwenden, können Sie einfach alle Ihre Jobs direkt mit so etwas wie durchlaufen Jenkins.instance.getItems().each.

jayhendren
quelle
3
Ich habe dein Skript leicht verbessert. runningBuilds = Jenkins.instance.getView('All').getBuilds().findAll() { it.getResult().equals(null) } runningBuilds.each { branch->branch.doKill() }
Tobi
5

Ich habe mir die Jenkins-Quelle angesehen und es scheint, dass das, was ich versuche, unmöglich ist, da das Stoppen eines Jobs anscheinend über einen Thread-Interrupt erfolgt. Ich habe keine Ahnung, warum der Job hängt.

Bearbeiten:

Mögliche Gründe für unaufhaltsame Jobs:

  • Wenn Jenkins in einer Endlosschleife steckt, kann er niemals abgebrochen werden.
  • Wenn Jenkins eine Netzwerk- oder Datei-E / A in der Java-VM ausführt (z. B. langwierige Dateikopie oder SVN-Aktualisierung), kann diese nicht abgebrochen werden.
Blokkie
quelle
Das ist eigentlich nicht unmöglich. Sie können die Jenkins-Skriptkonsole verwenden, um den Thread zu unterbrechen, in dem Ihr Job ausgeführt wird. Siehe die Erklärung hier: stackoverflow.com/a/26306081/1434041
Zahra
3

In solchen Fällen benutze ich normalerweise Jenkins-Cli. Sie können das Glas von einer Seite herunterladen http://your-jenkins-host:PORT/cli. Dann renne

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

Zusatzinfo:

Sie können auch eine Reihe von Builds wie übergeben 350:400. Allgemeine Hilfe beim Ausführen

java -jar jenkins-cli.jar help

Kontextbefehlshilfe für delete-buildsvon

java -jar jenkins-cli.jar delete-builds
Krzysztof Jabłoński
quelle
3

Die Antwort von Alexandru Bantiuc hat gut funktioniert, um den Bau zu stoppen, aber meine Testamentsvollstrecker waren immer noch beschäftigt. Ich konnte den Status des beschäftigten Executors wie folgt löschen

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()
      }
    }
  }
}
austinfromboston
quelle
3

Hatte das gleiche Problem, aber es gab keinen Stack-Thread. Wir haben den Job mithilfe dieses Snippets in der Jenkins-Konsole gelöscht. Ersetzen Sie den Jobnamen und erstellen Sie die Nummer durch Ihre.

def jobname = "Main/FolderName/BuildDefinition"
def buildnum = 6
Jenkins.instance.getItemByFullName(jobname).getBuildByNumber(buildnum).delete(); 
Kenneth King
quelle
1
Das funktioniert nicht! Es wird nur der Build aus der Ansicht gelöscht, wobei der laufende Prozess und alle Ressourcen gesperrt
bleiben
3

Kürzlich bin ich auf einen Knoten / Agenten gestoßen, bei dem ein Executor tagelang von einem Build "X" eines Pipeline-Jobs besetzt war, obwohl auf dieser Jobseite behauptet wurde, dass Build "X" nicht mehr existiert (verworfen nach 10 nachfolgenden Builds (!), As im Pipeline-Job konfiguriert). Verifiziert, dass auf Festplatte: Build "X" wirklich weg war.

Die Lösung: Es war der Agent / Knoten, der fälschlicherweise gemeldet hat, dass der besetzte Executor mit dem Ausführen von Build "X" beschäftigt war. Durch das Unterbrechen des Threads des Executors wurde dieser sofort freigegeben.

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

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

Andere Antworten berücksichtigt:

  • Die Antwort von @cheffe: hat nicht funktioniert (siehe nächster Punkt und Update unten).
  • Die Antworten mit Thread.getAllStackTraces(): kein passender Thread.
  • Die Antwort von @ levente-holló und alle Antworten mit getBuildByNumber(): traf nicht zu, da der Build nicht mehr wirklich da war!
  • Die Antwort von @austinfromboston: Das kam meinen Bedürfnissen nahe, hätte aber auch alle anderen Builds, die im Moment laufen, zerstört.

Update:
Ich habe wieder eine ähnliche Situation erlebt, in der ein Executor tagelang mit einem (noch vorhandenen) fertigen Pipeline-Build beschäftigt war. Dieses Code-Snippet war die einzige funktionierende Lösung.

t0r0X
quelle
Das hat den Trick für mich getan, danke! Die anderen Lösungen funktionierten nicht, da die Build-Nummer bereits weggeworfen wurde (wir behalten nur die Lat 5-Builds bei, sodass job.getBuildByNumber (...) nichts zurückgab).
L. Tischler
2

Ich hatte das gleiche Problem in der letzten halben Stunde ...

Konnte keinen Zombie-Build löschen, der in meiner Pipeline mit mehreren Zweigen ausgeführt wird. Sogar ein Neustart des Servers über die Benutzeroberfläche oder sogar über sudo service jenkins restart die Befehlszeile über hat die Ausführung blockiert ... Der Build konnte nicht gestoppt werden ... Er wurde immer wieder angezeigt.

Gebrauchte Version: Jenkins Version 2.150.2

Ich war sehr verärgert, aber ... als ich in das Protokoll des Builds schaute, fand ich am Ende des Protokolls etwas Interessantes:

Die Protokolldateiausgabe eines Zombie-Builds und das Anzeigen eines Neustarts haben ihn nicht gestoppt

Die rot markierten Teile sind die "frustrierenden Teile" ... Wie Sie sehen, wollte ich den Build immer von der Benutzeroberfläche abbrechen, aber es hat nicht funktioniert ...

Aber es gibt einen Hyperlink mit Text Click here to forcibly terminate running steps... (erster grüner) Jetzt habe ich den Link gedrückt ...) Nach der Linkausführung erschien eine Nachricht über Still pausedmit einem anderen Link Click here to forcibily kill entire build(zweiter grüner) Nach dem Drücken dieses Links war auch der Build endlich schwierig getötet...

Dies scheint also ohne spezielle Plugins zu funktionieren (mit Ausnahme des Build-Plugins für Multibranch-Pipelines selbst).

de-jcup
quelle
Wenn Sie den Link "Hier klicken, um den gesamten Build gewaltsam zu töten" angeben, würde ich abstimmen, da dies für mich funktionieren würde. Leider funktioniert diese Lösung nicht, da Jenkins die neuesten Protokolle nicht anzeigt, da die Protokolldatei mehrere GB umfasst.
mjaggard
Leider habe ich derzeit keinen Zugriff mehr auf diese Protokolle. Wenn ich diesen Fehler erneut habe, werde ich einen Kommentar zu ihrer / Update-Lösung hinzufügen. Aber wie wäre es, wenn Sie sich auf Ihrem Jenkins-Computer tailanmelden und nur einen Protokoll-Viewer verwenden, um den Link zu erhalten?
de-jcup
3
Das hat bei mir funktioniert, danke! @mjaggard: Der Link ist:<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

Ich hatte viele Zombi-Jobs, also habe ich das folgende Skript verwendet:

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"))
}
Stéphane
quelle
1

Das funktioniert bei mir immer:

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

Danke an funql.org

Aviel Yosef
quelle
0

Hatte ich jetzt zweimal das gleiche Problem, bestand das einzige Problem darin, den Tomcat-Server neu zu starten und den Build neu zu starten.

Ernie
quelle
0

Ein von mir geschriebenes Dienstprogramm namens jkillthread kann verwendet werden, um jeden Thread in einem Java-Prozess zu stoppen, solange Sie sich bei dem Computer anmelden können, auf dem der Dienst unter demselben Konto ausgeführt wird.

Jesse Glick
quelle
0

SEHR EINFACHE LÖSUNG

Der Grund, warum ich dieses Problem sah, war ein falscher httpLink auf der Seite, stattdessen httpssollte der Job gestoppt werden. Alles, was Sie tun müssen, ist, das onclickAttribut auf der HTML-Seite wie folgt zu bearbeiten

  1. Öffnen Sie ein Konsolenprotokoll des Jobs (der Pipeline), der hängen geblieben ist
  2. Klicken Sie auf das, was verfügbar ist, um den Job zu beenden (x-Symbol, "Klicken Sie hier, um laufende Schritte zwangsweise zu beenden" usw.), um den Link "Klicken Sie hier, um den gesamten Build zwangsweise zu beenden" anzuzeigen ( NICHT) wird im Moment anklickbar sein).
  3. Öffnen Sie die Konsole des Browsers ( verwenden Sie eine der drei Optionen für Chrome: F12; Strg + Umschalt + i; Menü-> Weitere Tools-> Entwicklertools )
  4. Suchen Sie den Link "Klicken Sie hier, um den gesamten Build zwangsweise zu beenden" manuell oder verwenden Sie die Schaltfläche "Element auf der Seite auswählen" der Konsole
  5. Doppelklicken Sie auf onclick Attribut, um dessen Wert zu bearbeiten
  6. Anhängen sanhttp habenhttps
  7. Drücken Sie die Eingabetaste, um die Änderungen zu senden
  8. Klicken Sie auf den Link "Klicken Sie hier, um den gesamten Build gewaltsam zu beenden"

Verwenden Sie den Screenshot als Referenz Geben Sie hier die Bildbeschreibung ein

Sergey Pleshakov
quelle
0

Verwenden der Skriptkonsole unter 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)
    }
  }
}
Poulad
quelle
0

Keine dieser Lösungen hat bei mir funktioniert. Ich musste den Computer neu starten, auf dem der Server installiert war. Der nicht zu tötende Job ist jetzt weg.

Marc Laliberté
quelle
-1

Sie können den Job einfach kopieren und den alten löschen. Wenn es keine Rolle spielt, dass Sie die alten Build-Protokolle verloren haben.

GUOHUI QIAN
quelle
-2

Hier ist, wie ich dieses Problem in der Version 2.100mit Blue Ocean behoben habe

  • Die einzigen Plugins, die ich installiert habe, sind für Bitbucket.
  • Ich habe nur einen einzigen Knoten.

sshin meine Jenkins Box
cd ~/.jenkins(wo ich Jenkins aufbewahre)
cd job/<job_name>/branches/<problem_branch_name>/builds
rm -rf <build_number>

Danach können Sie optional die Nummer in ändern nextBuildNumber(ich habe dies getan).

Schließlich habe ich jenkins neu gestartet ( brew services restart jenkins) Dieser Schritt wird offensichtlich unterschiedlich sein, je nachdem, wie Sie Jenkins verwalten und installieren.

Tom Bates
quelle
-3

Geben Sie die Blue-Ocean-Benutzeroberfläche ein. Versuchen Sie, den Job von dort aus zu stoppen.

user3360767
quelle
Was bedeutet das? Mein Jenkins-Server hat keine solche Benutzeroberfläche
Nico Haase
Blue Ocean ist ein sehr verbreitetes Jenkins-Plugin. Sie können es hier lesen .
user3360767
Bricht dies den Job tatsächlich anders ab als die klassische Benutzeroberfläche? Es scheint zweifelhaft.
StockB