2016-05-26 21 views
55

Stiamo eseguendo Jenkins 2.x e adoriamo il nuovo plug-in Pipeline. Tuttavia, con così tanti rami in un repository, lo spazio su disco si riempie rapidamente.Jenkins Pipeline Wipe Out Works

C'è qualche plug-in compatibile con Pipeline che possa cancellare l'area di lavoro in una build di successo?

risposta

54

È possibile utilizzare deleteDir() come ultimo passaggio della pipeline Jenkinsfile (presupponendo che non sia stata modificata la directory di lavoro).

+5

Ho problemi con deleteDir(). Sembra che non sia in grado di eliminare casualmente la directory corrente quando il nodo viene generato su uno slave. La compilazione fallisce, naturalmente, se ciò accade. Quindi, fai attenzione se i tuoi lavori falliscono casualmente. Non capisco perché il nodo non si limita a pulire lo spazio di lavoro quando il nodo inizia a costruire. Poiché il nodo può essere eseguito ovunque, non è possibile comunque formulare ipotesi sui file nello spazio di lavoro. – ssindelar

+0

Ma penso che cancellerà solo lo spazio di lavoro sul nodo corrente. Nel caso generale, la tua pipeline funzionerà su diversi schiavi. –

+7

L'ho messo all'inizio poco prima di 'checkout scm'. – jpbochi

38

Infatti la funzione deleteDir cancella in modo ricorsivo la directory corrente e il suo contenuto. Collegamenti simbolici e giunzioni non saranno seguiti ma saranno rimossi.

Per eliminare una directory specifica di un'area di lavoro, eseguire il passaggio deleteDir in un passo dir.

dir('directoryToDelete') { 
    deleteDir() 
} 
+3

Sebbene l'OP abbia chiesto semplicemente come eliminare l'area di lavoro, questa risposta è la più informativa. –

66

Come @gotgenes rilevare con Jenkins versione. 2,74, le opere qui sotto, non è sicuro da quando, forse, se qualcuno può modificare e aggiungere la versione sopra

cleanWs() 

Con, Jenkins Versione 2.16 e la Workspace Cleanup Plugin, che ho, io uso

step([$class: 'WsCleanup']) 

per eliminare l'area di lavoro.

È possibile vederlo andando a

JENKINS_URL/job/<any Pipeline project>/pipeline-syntax 

quindi selezionando "step: Corporatura Generale passo" dal passo del campione e quindi selezionando "Elimina spazio di lavoro quando costruzione è fatto" dal passaggio di generazione

+0

Questo funziona per me: Jenkins 2.7.2, Plug-in CleanSpace Workspace 0.30 – dsh

+1

Secondo [questa PR] (https://github.com/jenkinsci/ws-cleanup-plugin/pull/30/files#diff-4b88580f361d14ff592e5f06a99026ccR258), incluso in [0.33] (https://wiki.jenkins.io/display/JENKINS/Workspace+Cleanup+Plugin#WorkspaceCleanupPlugin-Release0.33 (2017-04-24)), questo viene chiamato nella pipeline come 'cleanWs' . – gotgenes

2

Facciamo certo stiamo lavorando con un'area di lavoro pulita usando una funzionalità del plugin git. È possibile aggiungere ulteriori comportamenti come "Pulisci prima del checkout". Lo usiamo anche per "Prune stale remote-tracking branches".

2

Le soluzioni menzionate deleteDir() e cleanWs() (se si utilizza lo workspace cleanup plugin) funzionano entrambe, ma la raccomandazione di utilizzarlo in una fase di creazione aggiuntiva spesso non è la soluzione desiderata. Se la compilazione fallisce e la pipeline viene interrotta, questa fase di pulizia non viene mai raggiunta e pertanto lo spazio di lavoro non viene pulito su build falliti.

=> Nella maggior parte dei casi si dovrebbe probabilmente mettere in un post-built-step condition come always:

pipeline { 
    agent any 
    stages { 
     stage('Example') { 
      steps { 
       echo 'Hello World' 
      } 
     } 
    } 
    post { 
     always { 
      cleanWs() 
     } 
    } 
} 
+1

Questa era assolutamente la chiave per il mio caso d'uso. Ho bisogno di archiviare gli artefatti dal lavoro e l'esecuzione di 'cleanWs()' come un passo li elimina prima dell'esecuzione del comando di post build archive. 'cleanWs()' dovrebbe sempre essere eseguito come un comando post-build – Brandon

0

Utilizzando l'estensione 'WipeWorkspace' sembra funzionare pure. Si richiede la forma più a lungo:

checkout([ 
    $class: 'GitSCM', 
    branches: scm.branches, 
    extensions: scm.extensions + [[$class: 'WipeWorkspace']], 
    userRemoteConfigs: scm.userRemoteConfigs 
]) 

Maggiori dettagli qui: https://support.cloudbees.com/hc/en-us/articles/226122247-How-to-Customize-Checkout-for-Pipeline-Multibranch-

disponibili estensioni GitSCM qui: https://github.com/jenkinsci/git-plugin/tree/master/src/main/java/hudson/plugins/git/extensions/impl

0

Cleaning up: Dal momento che la sezione di post di una condotta è garantito per funzionare al termine di un Esecuzione della pipeline, possiamo aggiungere alcune notifiche o altri passaggi per eseguire la finalizzazione, la notifica o altre attività di fine pipeline.

pipeline { 
    agent any 
    stages { 
     stage('No-op') { 
      steps { 
       sh 'ls' 
      } 
     } 
    } 
    post { 
     always { 
      echo 'One way or another, I have finished' 
      deleteDir() /* clean up our workspace */ 
     } 
    } 
}