私たちはJenkins 2.xを実行していて、新しいPipelineプラグインが大好きです。ただし、リポジトリに非常に多くのブランチがあると、ディスクスペースがすぐにいっぱいになります。
正常にビルドされたときにワークスペースを一掃できる、Pipelineと互換性のあるプラグインはありますか?
パイプラインのJenkinsfileの最後のステップとして deleteDir()
を使用できます(作業ディレクトリを変更していないと仮定して)。
@gotgenesが で指摘したように、Jenkinsバージョン。 2.74 、以下のように動作しますが、いつか、上のバージョンを編集して追加できる人がいるのであれば
cleanWs()
Jenkins Version 2.16 と Workspace Cleanup Plugin を使って、私は使っています。
step([$class: 'WsCleanup'])
ワークスペースを削除します。
に行くことによってそれを見ることができます
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax
次に、サンプルステップから「ステップ:一般ビルドステップ」を選択し、次にビルドステップから「ワークスペースを削除する」を選択します。
実際、deleteDir関数は現在のディレクトリとその内容を再帰的に削除します。シンボリックリンクとジャンクションは追跡されませんが削除されます。
ワークスペースの特定のディレクトリを削除するには、dirステップでdeleteDirステップをラップします。
dir('directoryToDelete') {
deleteDir()
}
上記の解決策deleteDir()
とcleanWs()
( ワークスペースクリーンアッププラグインを使用している場合 )は両方とも、 で動作しますが、追加のビルドステップで使用することをお勧めします ビルドが失敗してパイプラインが中止された場合、このクリーンアップステージに到達することはなく、したがって失敗したビルドでワークスペースはクリーンアップされません。
=>ほとんどの場合、おそらくそれを ビルド後のステップ条件 のようにalways
にするべきです:
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
post {
always {
cleanWs()
}
}
}
次のようにdeleteDir()を使用しました。
post {
always {
deleteDir() /* clean up our workspace */
}
}
しかし、私はまた、常に成功または失敗の後に必ず実行しなければなりませんでしたが、あなたは投稿条件を注文することができません。現在の順序は常に、変更、中止、失敗、成功、そして不安定です。
ただし、 cleanup が常に最後に実行される非常に便利な投稿条件があります。 https://jenkins.io/doc/book/pipeline/syntax/ を参照してください。
だから最後に私の投稿は次のようになりました:
post {
always {
}
success{
}
failure {
}
cleanup{
deleteDir()
}
}
うまくいけば、これはいくつかのコーナーケースに役立つかもしれません
次のパイプラインスクリプトを使用します。
pipeline {
agent { label "master" }
stages {
stage('CleanWorkspace') {
steps {
cleanWs()
}
}
}
}
次の手順を実行します:
Gitプラグインの機能を使用して、クリーンなワークスペースで作業していることを確認します。 「チェックアウト前に清掃」などの追加の動作を追加できます。私たちはこれを 'Prune stale remote-tracking branches'にも使います。
クリーンアップ :PipelineのpostセクションはPipelineの実行の最後に実行されることが保証されているので、ファイナライズ、通知、または他のPipeline終了タスクを実行するための通知またはその他のステップを追加できます。
pipeline {
agent any
stages {
stage('No-op') {
steps {
sh 'ls'
}
}
}
post {
cleanup {
echo 'One way or another, I have finished'
deleteDir() /* clean up our workspace */
}
}
}
'WipeWorkspace'拡張機能を使用してもうまくいくようです。長い形式が必要です。
checkout([
$class: 'GitSCM',
branches: scm.branches,
extensions: scm.extensions + [[$class: 'WipeWorkspace']],
userRemoteConfigs: scm.userRemoteConfigs
])
ここで利用可能なGitSCMの拡張機能: https://github.com/jenkinsci/git-plugin/tree/master/src/main/Java/hudson/plugins/git /extensions/impl
Jenkinsでカスタムワークスペースを使用した場合、deleteDir()は@tmpフォルダを削除しません。
そのため、@ tmpをワークスペースの使用とともに削除します。
pipeline {
agent {
node {
customWorkspace "/home/jenkins/jenkins_workspace/${JOB_NAME}_${BUILD_NUMBER}"
}
}
post {
cleanup {
/* clean up our workspace */
deleteDir()
/* clean up tmp directory */
dir("${workspace}@tmp") {
deleteDir()
}
/* clean up script directory */
dir("${workspace}@script") {
deleteDir()
}
}
}
}
このスニペットはデフォルトのワークスペースでも動作します。
Git shallow clone を高度なクローンの振る舞いで使います
そして他のアプローチはgit clean -fdx
で木をきれいにすることです