2016-05-26 5 views
55

を一掃し、新しいパイプラインプラグインを愛します。しかし、リポジトリ内の非常に多くのブランチを使用すると、ディスク領域がすぐにいっぱいになります。ジェンキンスパイプラインは、私たちは、ジェンキンス2.xのを実行しているワークスペース

私は成功したビルドにワークスペースを一掃することができますパイプラインと互換性のあるすべてのプラグインはありますか?

答えて

54

あなたは、パイプラインの最後のステップJenkinsfile(あなたが作業ディレクトリを変更していないと仮定した場合)としてdeleteDir()を使用することができます。

+5

私はdeleteDir()に問題があります。ノードがスレーブ上で構築されるとき、現在のディレクトリをランダムに削除することはできないようです。これが起こるなら、ビルドはもちろん失敗します。あなたの仕事が無作為​​に失敗した場合に注意してください。ノードが構築を開始したときにノードが単に作業領域をクレンジングしない理由はわかりません。ノードはどこでも実行できるため、ワークスペース内のファイルについては何も仮定することはできません。 – ssindelar

+0

しかし、私は現在のノード上の作業領域だけを削除すると思う。一般的なケースでは、パイプラインはいくつかの異なるスレーブ上で実行されます。 –

+7

これを 'checkout scm'の直前に置いています。 – jpbochi

38

実際にdeleteDir機能は、再帰的にカレントディレクトリとその内容を削除します。シンボリックリンクとジャンクションは追跡されませんが、削除されます。 DIRステップでdeleteDirステップを包む作業領域の特定のディレクトリを削除するには

。 @gotgenes同様

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

OPは単にワークスペースを削除する方法を尋ねましたが、この回答が最も有益です。 –

66

ジェンキンスバージョンと指摘しました。いくつかのいずれかを編集して、私が持っていることを、私が使用し、ジェンキンスバージョン2.16Workspace Cleanup Plugin

cleanWs() 

上のバージョンを追加することができます多分あればとき、以来、わからない2.74、以下の作品、

step([$class: 'WsCleanup']) 

ワークスペースを削除します。

あなたが次に選択

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

に行くことによって、それを表示することができます:サンプル段階から「ステップ一般的なビルドステップ」をしてからビルドステップ

+0

これは私のために働いています:Jenkins 2.7.2、Workspace Cleanup Plugin 0.30 – dsh

+1

[this PR](https://github.com/jenkinsci/ws-cleanup-plugin/pull/30/files#diff-4b88580f361d14ff592e5f06a99026ccR258)によると、 [0.33](https://wiki.jenkins.io/display/JENKINS/Workspace+Cleanup+Plugin#WorkspaceCleanupPlugin-Release0.33(2017-04-24))に含まれていますが、これはパイプラインで 'cleanWs' 。 – gotgenes

2

から私たちが作る「ビルドが行われたときにワークスペースを削除」を選択gitプラグインの機能を使用してクリーンな作業領域で作業していることを確認してください。 [チェックアウト前にクリーンアップ]のような追加の動作を追加できます。私たちは、これを「古くなったリモートトラッキングブランチの整理」にも使用します。

2

deleteDir()およびcleanWs()workspace cleanup pluginを使用している場合)はどちらも機能しますが、余分なビルドステップで使用することはしばしば望ましい解決策ではありません。ビルドが失敗し、パイプラインが中止された場合、このクリーンアップ段階に達することはありませんし、失敗したビルドにしたがって、ワークスペースがきれいではありません。

=>ほとんどの場合、あなたはおそらくalwaysようpost-built-step conditionにそれを置く必要があります:「WipeWorkspace」拡張子を使用して

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

これは私の使用事例にとって絶対に重要でした。ジョブから成果物をアーカイブする必要があり、 'cleanWs()'をステップとして実行すると、ビルド後のアーカイブコマンドが実行される前に削除されます。 'cleanWs()'はポストビルドコマンドとして常に実行されるべきです – Brandon

0

としても動作するようです。これは、長い形式を必要とします。ここ

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

詳細:ここhttps://support.cloudbees.com/hc/en-us/articles/226122247-How-to-Customize-Checkout-for-Pipeline-Multibranch-

利用GitSCM拡張子:https://github.com/jenkinsci/git-plugin/tree/master/src/main/java/hudson/plugins/git/extensions/impl

0

Cleaning up:パイプラインのポスト部分はの最後に実行することが保証されているのでパイプラインの実行中に、通知やその他のステップを追加して、ファイナライズ、通知、またはその他のパイプライン終了タスクを実行できます。

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 */ 
     } 
    } 
}