web-dev-qa-db-ja.com

ジェンキンス・パイプラインがワークスペースを一掃する

私たちはJenkins 2.xを実行していて、新しいPipelineプラグインが大好きです。ただし、リポジトリに非常に多くのブランチがあると、ディスクスペースがすぐにいっぱいになります。

正常にビルドされたときにワークスペースを一掃できる、Pipelineと互換性のあるプラグインはありますか?

99
qmo

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

82

@gotgenesが で指摘したように、Jenkinsバージョン。 2.74 、以下のように動作しますが、いつか、上のバージョンを編集して追加できる人がいるのであれば

cleanWs()

Jenkins Version 2.16 Workspace Cleanup Plugin を使って、私は使っています。

step([$class: 'WsCleanup'])

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

に行くことによってそれを見ることができます

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

次に、サンプルステップから「ステップ:一般ビルドステップ」を選択し、次にビルドステップから「ワークスペースを削除する」を選択します。

98
cursed_axes

実際、deleteDir関数は現在のディレクトリとその内容を再帰的に削除します。シンボリックリンクとジャンクションは追跡されませんが削除されます。

ワークスペースの特定のディレクトリを削除するには、dirステップでdeleteDirステップをラップします。

dir('directoryToDelete') {
    deleteDir()
}
55
Sebastien

上記の解決策deleteDir()cleanWs()ワークスペースクリーンアッププラグインを使用している場合 )は両方とも、 で動作しますが、追加のビルドステップで使用することをお勧めします ビルドが失敗してパイプラインが中止された場合、このクリーンアップステージに到達することはなく、したがって失敗したビルドでワークスペースはクリーンアップされません。

=>ほとんどの場合、おそらくそれを ビルド後のステップ条件 のようにalwaysにするべきです:

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

次のようにdeleteDir()を使用しました。

  post {
        always {
            deleteDir() /* clean up our workspace */
        }
    }

しかし、私はまた、常に成功または失敗の後に必ず実行しなければなりませんでしたが、あなたは投稿条件を注文することができません。現在の順序は常に、変更、中止、失敗、成功、そして不安定です。

ただし、 cleanup が常に最後に実行される非常に便利な投稿条件があります。 https://jenkins.io/doc/book/pipeline/syntax/ を参照してください。

だから最後に私の投稿は次のようになりました:

post {
    always {

    }
    success{

    }
    failure {

    }
    cleanup{
        deleteDir()
    }
}

うまくいけば、これはいくつかのコーナーケースに役立つかもしれません

11
user3586383

次のパイプラインスクリプトを使用します。

pipeline {
    agent { label "master" }
    stages {
        stage('CleanWorkspace') {
            steps {
                cleanWs()
            }
        }
    }
}

次の手順を実行します:

  1. ワークスペースをクリーンアップするパイプラインジョブの最新ビルドに移動します。
  2. LHSメニューの「再生」リンクをクリックします。
  3. 上記のスクリプトをテキストボックスに貼り付けて、[実行]をクリックします。
3
Andrew Gray

Gitプラグインの機能を使用して、クリーンなワークスペースで作業していることを確認します。 「チェックアウト前に清掃」などの追加の動作を追加できます。私たちはこれを 'Prune stale remote-tracking branches'にも使います。

3
NOTtardy

クリーンアップ :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 */
        }
    }
}
2
shawn derik

'WipeWorkspace'拡張機能を使用してもうまくいくようです。長い形式が必要です。

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

1
blindsnowmobile

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()
            }
        }
    }
}

このスニペットはデフォルトのワークスペースでも動作します。

0
Pankaj Shinde

Git shallow clone 高度なクローンの振る舞いで使います
enter image description here

そして他のアプローチはgit clean -fdxで木をきれいにすることです

0
kyb