2013-12-12 9 views
9

Ich löschte vor kurzem 2 Job von Jenkins (über GUI). Wenn ich mich danach in Sklaven anmelde, sehe ich immer noch den Arbeitsbereich dieser 2 Jobs herumliegen. Ist dieses Verhalten normal?Löschen Jenkins Jobs über GUI nicht ihre Arbeitsbereiche in Slaves

Hinweise:

  • Jenkins Master und Slaves werden auf Windows-Umgebung alle ausgeführt wird.
  • Master läuft unter Windows Server 2003 und Slaves unter Windows Server 2008 R2.
  • Jenkins Version 1.509.2

Grüße, Benil

Antwort

8

Leider ist: https://groups.google.com/forum/#!topic/jenkinsci-users/SiZ3DL-UJ-8

Workspaces auf Sklaven gefunden werden nicht gelöscht, da dies ein nicht-triviales Problem ist (es wäre bedeutet, dass Jobs jeden Slave aufzeichnen müssen, auf dem der Job jemals ausgeführt wurde, und dass auch offline arbeitende Slaves berücksichtigt werden müssen, um eine wirklich gründliche Lösung zu finden).

+0

Sie treffen ins Schwarze. Genagelt die Frage Kumpel. Vielen Dank. – Ben

+0

Es gibt jedoch ein offenes Problem für Jenkins: https://issues.jenkins-ci.org/browse/JENKINS-2111 - und ein Workspace Clean-Up-Skript wurde zu dieser Diskussion geschrieben: https: // groups. Google.com/d/msg/jenkinsci-users/SiZ3DL-UJ-8/Mq1za4sZpwwJ – akaihola

0

zu verfeinern, was @oblio sagte

es bedeuten würde, dass Arbeitsplätze jedes Slaves aufnehmen müßten hat der Job immer auf

ausgeführt worden Baut von Arbeitsplätzen Rekord tun, der Slave sie lief auf, aber Builds können (und werden oft) nach einer Weile gelöscht werden.

und es hätte auch zu berücksichtigen Sklaven zu nehmen, die

Natürlich offline sind, aber dies in der Regel durch den Arbeitsbereich Cleanup-Funktion in Jenkins Kern gebaut gehandhabt wird, da es als Hintergrundprozess läuft das betrifft derzeit Online-Slaves (Löschen selten genutzter Arbeitsbereiche), so wird jeder Slave, der manchmal online ist, schließlich gereinigt werden.

Das Problem ist, dass diese Funktion augenblickliche Arbeitsbereiche ignoriert, die nicht einem Job entsprechen, der zum Zeitpunkt der Ausführung nicht existiert, um auf der konservativen Seite zu irren. This commit of mine hat den Cleanup-Thread neu geschrieben, um einige andere Probleme zu beheben, aber nicht diesen.

1

Ich habe gerade ein Skript geschrieben, das regelmäßig geplant werden kann, um nicht verwendete Arbeitsbereiche zu bereinigen. Es wird alle Jenkins-Slaves durchlaufen und prüfen, ob die Verzeichnisse unter dem Arbeitsbereich bereits im Jenkins-Master gelöscht sind.

https://gist.github.com/ceilfors/1400fd590632db1f51ca

+0

Ihr Skript hat nicht für mich gearbeitet. Die Cloudbees-Ordnerklasse – Adam

+0

@Adam CloudBees-Ordnerklasse kann nicht gefunden werden, indem [CloudBees Folder Plugin] installiert wird (https://wiki.jenkins-ci.org/display/JENKINS/CloudBees+Folders+Plugin). Sie können das Skript leicht ändern, um die Ordnerunterstützung zu entfernen, wenn Sie das Plugin nicht installieren möchten. – ceilfors

+0

@Adam Sie können dieses Skript auch dann ausführen, wenn Sie nicht über das Cloudbees-Ordner-Plugin verfügen, aber dieses Plugin unterstützt, wenn Sie es jemals verwenden, wenn Sie die Bedingung inisFolder() von 'return item instanceof Folder ändern 'um' item.class.canonicalName = 'com.cloudbees.hudson.plugins.folder.Folder'' zurückzugeben. Sie können dann 'import com.cloudbees.hudson.plugins.folder.Folder' entfernen und Sie werden das Plugin nicht mehr _erfordern_. – Jelaby

0

ich auf eine effektive Skript kam, die nur aus der Reinigung macht einen guten Job, wenn der Speicherplatz knapp wird und bringt die Offline-Slave: https://gist.github.com/rb2k/8372402

+0

Dieses Skript beantwortet die ursprüngliche Frage nicht. Dieses Skript löscht einfach alle in Slaves gefundenen Jobs. Das Löschen von Arbeitsbereichen für vorhandene Jobs ist schlecht, weil es CI verlangsamt, d. H. Alles muss erneut ausgecheckt werden, und der Speicherplatz wird trotzdem wieder wachsen. – ceilfors

+0

Es ist wahr, dass es nicht so chirurgisch ist, wie es sein könnte. Die Jobs, die noch vorhanden sind, werden wieder aufgebaut, die gelöschten Jobs jedoch nicht. Könnten Sie das Skript vielleicht so aktualisieren, dass es prüft, ob der Job noch gültig ist? – Adam

+0

Das versucht mein Skript in meiner Antwort. Außerdem löscht das Skript in Ihrer Antwort den Arbeitsbereich für gelöschte Jobs nicht, daher * wird alles wieder nach oben * wachsen. Wenn Sie das Skript lesen, durchläuft es eindeutig die 'Jenkins.instance.items', was bedeutet, dass die gelöschten Jobs nicht berücksichtigt werden. – ceilfors

Verwandte Themen