Corredor

ウェブ、プログラミングの勉強メモ。

Jenkins Multibranch Pipeline でジョブ実行後にワークスペースを削除する方法

初めての自動テスト ―Webシステムのための自動テスト基礎

初めての自動テスト ―Webシステムのための自動テスト基礎

Jenkins の Multibranch Pipeline は、ジョブ実行後にワークスペースを自動削除してくれない。そのままでは、前回のジョブ実行時の結果が残ったフォルダ内でジョブが動作してしまうのだ。

例えば、node_modules/ ディレクトリが残ったまま npm install が実行されたりすると、本当にまっさらな状態から npm のインストール作業を行ったワケではないので、微妙に実行結果が変わってしまったりすることがある。だから、できればジョブはその都度まっさらな状態から行われるようにしたい。

なぜかジョブ設定画面で「ワークスペースの削除」を選択しても有効にならず、Declarative Pipeline 内で deleteDir() という関数を読んでやる必要がある。

pipeline {
  agent any
  stages {
    stage('処理あれこれ') {
      steps {
        echo '処理とか'
      }
    }
  }
  post {
    always {
      // 最後に必ずワークスペースを削除する
      deleteDir()
    }
  }
}

また、Workspace Cleanup Plugin というプラグインを入れてあると、cleanWs() という関数が使えるようになり、こちらでも deleteDir() と同等のことができる。deleteDir()cleanWs() とで基本的な動作には変わりなさそう (厳密には cleanWs() だとワークスペースディレクトリを一旦リネームしてから消しているようだったが、最終的に消えることには変わりないので違いなし)。

どちらの場合も、workspace/【対象のワークスペースディレクトリ】/ は削除されるが、workspace/【対象のワークスペースディレクトリ】@tmp/ というディレクトリの方は削除されない。コチラには過去のタスク実行時の設定ファイルと見られるゴミが残っている。これを消す方法はどうもなさそう?「消せるようにして」という Issue は上がっている。

試していないが、Tmp Cleaner Plugin というプラグインがあったりするので、他のプラグインで定期的にお掃除とかはできそう。

ひとまずはコレでワークスペースのお掃除はできたので、おけおけ。