C'è un modo per ripulire l'area di lavoro di Jenkins?


100

Come posso pulire l'area di lavoro in Jenkins? sto usandoAccuRev come strumento di controllo della versione.

Ho creato freestyleprogetti a Jenkins.

Risposte:


91

C'è un modo per pulire l'area di lavoro in Jenkins. Puoi pulire l'area di lavoro prima o dopo la compilazione.

Innanzitutto, installa il plug-in Workspace Cleanup .

Per pulire lo spazio di lavoro prima della compilazione: in Ambiente di compilazione , seleziona la casella che dice Elimina spazio di lavoro prima dell'avvio della compilazione.

Per ripulire lo spazio di lavoro dopo la creazione: Sotto l'intestazione Azioni post-compilazione selezionare Elimina spazio di lavoro al termine della compilazione dal menu a discesa Aggiungi azioni post-compilazione .


Grazie mille Nagendra. Sono in grado di risolvere questo problema utilizzando il plug-in di pulizia dell'area di lavoro.
Karthik

cosa succederà se non pulisco l'area di lavoro? sta recuperando le modifiche dall'URL remoto o sta semplicemente costruendo la stessa cosa ancora e ancora?
alphaguy

@alphaguy Jenkins crea un nuovo spazio di lavoro per ogni build che esegui, quindi se non elimini gli spazi di lavoro, alla fine il tuo nodo esaurirà lo spazio.
Miles Winther

Possiamo riutilizzare lo spazio di lavoro ... attualmente quando spingo il codice viene clonato dal server git, quindi avvio la compilazione. Questo richiede un lungo processo che aggiunge un extra al processo di costruzione! possiamo solo scegliere l'ultimo commit? @MilesWinther
alphaguy

@alphaguy Puoi utilizzare un repository di riferimento, vedi la risposta qui: stackoverflow.com/a/9932036/6221831
Miles Winther

53

Se vuoi ripulirlo manualmente, per me con la mia versione di jenkins (non sembrava aver bisogno di un plug-in aggiuntivo installato, ma chi lo sa), c'è un link "spazio di lavoro" nella colonna di sinistra, fai clic sul tuo progetto, quindi su "area di lavoro", quindi un collegamento "Cancella spazio di lavoro corrente" appare sotto di esso sulla colonna di sinistra. immagine dello schermo


4
Non lo vedo, purtroppo. Sicuro che non sia un plugin?
Joachim Breitner

2
Hmm sembra che il "plugin di pulizia dell'area di lavoro" sia effettivamente uno dei plugin che viene installato "per impostazione predefinita". Tuttavia, dopo averlo rimosso, ho ancora quel collegamento e sembra funzionare ancora. Quindi ... non sono sicuro da dove provenga. V2.121.3
rogerdpack

2
Ha funzionato ma ho dovuto fare clic due volte sul collegamento dell'area di lavoro: la prima per andare alla pagina "area di lavoro", la seconda volta per mostrare effettivamente il collegamento "Elimina spazio di lavoro corrente". Immagino sia un'informazione che puoi includere nella risposta.
Gnafu

Quale versione di Jenkins è questa? Perché il mio non mostra questa opzione (probabilmente il mio è troppo vecchio).
Pedro Trujillo

V2.121.3 non sono sicuro su altre versioni
rogerdpack

31

Oltre alle soluzioni di cui sopra, c'è un modo più "COMUNE": eliminare direttamente il consumatore di spazio più grande dalla macchina Linux. Puoi seguire i passaggi seguenti:

  1. Accedi alla macchina Jenkins (Putty) inserisci qui la descrizione dell'immagine
  2. cd al percorso di installazione di Jenkins

Usando ls -lart per elencare anche la cartella nascosta, normalmente l'installazione di jenkin viene posizionata nella cartella .jenkins /

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
  1. elenca gli spazi delle cartelle

Use df -h per mostrare lo spazio su disco ad alto livello

du -sh ./*/ per elencare la memoria totale per ogni sottocartella nel percorso corrente.

du -a /etc/ | sort -n -r | head -n 10 elencherà le prime 10 directory che consumano spazio su disco in / etc /

  1. Elimina la vecchia build o un'altra cartella di grandi dimensioni

Normalmente ./job/ cartella o ./workspace/ può essere la cartella più grande. Entra ed elimina la base di cui hai bisogno (NON eliminare l'intera cartella).

rm -rf theFolderToDelete

inserisci qui la descrizione dell'immagine


3
Non sono sicuro del motivo per cui hai votato. Questa sembra una buona opzione per gli amministratori di Jenkins. Accetto non per utenti di "sola lettura".
Saikat

1. Questo non risponde realmente alla domanda posta e 2. il mio server Jenkins è in esecuzione su Windows.
mjaggard

10
@mjaggard La domanda è stata posta da qualcun altro e non ha detto se è solo per Windows. Inoltre ha chiesto come pulire lo spazio di lavoro (non limitato al frontend / client). Mi manca qualcosa di ovvio qui?
Saikat

4
Sono totalmente d'accordo con @takias, mi sembra una valida risposta alla domanda. E uno buono se hai abbastanza permesso per farlo.
PhoneixS

1
Questa è una risposta a "come faccio a recuperare spazio su una macchina GNU / Linux" non specifica per Jenkins.
Felipe Alvarez

20

Plugin di pulizia dell'area di lavoro

Nel file Jenkins aggiungi

cleanWs()

Ciò eliminerà l'area di lavoro al termine della compilazione


3
Apprezzo molto questa risposta perché avevo installato il plug-in dalle altre risposte, ma questo è ciò che lo ha fatto funzionare per la mia configurazione. In aggiunta a ciò, ho seguito i collegamenti allo stesso plug-in nelle altre risposte, ma cleanWs()non era presente nella pagina di destinazione del plug-in come sintassi da aggiungere al mio file Jenkinsfile.
Arthur Weborg

19

IMPORTANTE: è possibile rimuovere l'area di lavoro per un determinato lavoro Jenkins fintanto che il lavoro non è attualmente in esecuzione!

NOTA: presumo che tu $JENKINS_HOMEsia impostato sul valore predefinito:/var/jenkins_home .

Pulisci un'area di lavoro

rm -rf /var/jenkins_home/workspaces/<workspace>

Pulisci tutte le aree di lavoro

rm -rf /var/jenkins_home/workspaces/*

Pulisci tutti gli spazi di lavoro con poche eccezioni

Questo usa grep per creare una whitelist:

ls /var/jenkins_home/workspace \ 
  | grep -v -E '(job-to-skip|another-job-to-skip)$' \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

Pulisci le 10 aree di lavoro più grandi

Questo utilizza du e sort per elencare gli spazi di lavoro in ordine dal più grande al più piccolo. Quindi, usa la testa per afferrare i primi 10:

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

2
Questo è pericoloso perché i lavori potrebbero utilizzare quegli spazi di lavoro.
aleb

13

È possibile eseguire lo script seguente nella console Gestisci JenkinsScript per eliminare gli spazi di lavoro di tutti i lavori in un colpo solo. Lo abbiamo fatto per liberare spazio sul file system.

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

questo non funziona per me, mostra java.lang.NullPointerException: Impossibile ottenere la proprietà 'elementi' su oggetto nullo.
Vincent Gerris

3

Supponendo che la domanda riguardi la pulizia dell'area di lavoro del lavoro corrente, puoi eseguire:

test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*

2

non è consentito commentare, quindi:

La risposta di Upen funziona bene, ma non se hai Jenkins Pipeline Jobs mescolato con Freestyle Jobs. Non esiste un metodo come DoWipeWorkspace sui processi di pipeline. Quindi ho modificato lo script per saltare quelli:

import hudson.model.*
import org.jenkinsci.plugins.workflow.job.WorkflowJob

// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding() && !(item instanceof WorkflowJob))
  {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

puoi anche filtrare in base ai nomi dei lavori, se necessario: item.getDisplayName().toLowerCase().contains("release")


1

Dovrai installare questo plugin prima che vengano visualizzate le opzioni sopra menzionate

Plugin di pulizia dell'area di lavoro

Questo plugin aggiunge la casella di controllo a tutte le configurazioni del lavoro per consentire di eliminare l'intero spazio di lavoro prima di eseguire qualsiasi passaggio (incluso il controllo del codice sorgente)

Ciò è utile per assicurarti di iniziare sempre da un punto noto per garantire il modo in cui verrà eseguita la build


3
Per favore aggiungi alcune informazioni che il tuo link contiene. La risposta solo link non è ciò che stiamo cercando in SO! :)
Chilion

2
Questa aggiunta non contiene più informazioni che questa risposta non ha già coperto. In effetti aggiunge molto meno
Liam

0

Se vuoi rimuovere solo una directory (o file) puoi usare Groovy e Manage Jenkins → Scripts Console eseguire uno script che lo rimuove.

Ad esempio, puoi guardare i file con:

dh = new File('./bitnami/jenkins/jenkins_home/workspace/jobname/folder')
dh.eachFile {
  println(it)
}

E poi, quando hai la cartella che desideri eliminare dh, potresti semplicemente aggiungere il codice successivo:

dh.deleteDir()

E verrà eliminato.

Nota: il percorso mostrato nell'esempio è per un'installazione di Bitnami Jenkins, la tua potrebbe essere diversa.


0

C'è un'opzione per farlo. Configura -> Azioni post-compilazione
L'opzione è disponibile per impostazione predefinita almeno nella versione 2.236 di Jenkins

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.