回答:
deleteDir()
パイプラインJenkinsfileの最後のステップとして使用できます(作業ディレクトリを変更しなかった場合)。
checkout scm
。
@gotgenesがJenkinsバージョンで指摘したように。2.74、以下は動作しますが、いつか、誰かが上記のバージョンを編集して追加できるかどうかわからないため、
cleanWs()
、とジェンキンスバージョン2.16およびワークスペースのクリーンアップのプラグイン、私は、私の使用を持っていること
step([$class: 'WsCleanup'])
ワークスペースを削除します。
あなたは行くことによってそれを見ることができます
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax
次に、サンプルステップから「ステップ:一般的なビルドステップ」を選択し、ビルドステップから「ビルドが完了したらワークスペースを削除」を選択します。
上記のソリューションdeleteDir()
とcleanWs()
(ワークスペースクリーンアッププラグインを使用している場合)はどちらも機能しますが、追加のビルドステップで使用することは通常、望ましいソリューションではありません。ビルドが失敗してパイプラインが中止された場合、このクリーンアップ段階に到達しないため、ビルドが失敗してもワークスペースはクリーンアップされません。
=>ほとんどの場合、次のようなビルド後のステップの条件に置く必要がありますalways
。
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
post {
always {
cleanWs()
}
}
}
cleanWs()
ステップとして実行すると、ポストビルドアーカイブコマンドが実行される前にアーティファクトが削除されます。 cleanWs()
常にビルド後のコマンドとして実行する必要がある
post
セクションが1つしかない場合、安全に条件にcleanWs()
入れることができますalways
が、最も安全な場所はcleanup
条件内です。post { cleanup { cleanWs() } }
実際、deleteDir関数は、現在のディレクトリとその内容を再帰的に削除します。シンボリックリンクとジャンクションはたどられませんが、削除されます。
ワークスペースの特定のディレクトリを削除するには、deleteDirステップをdirステップにラップします。
dir('directoryToDelete') {
deleteDir()
}
次のようにdeleteDir()を使用しました。
post {
always {
deleteDir() /* clean up our workspace */
}
}
ただし、その後も常に成功または失敗を実行する必要がありましたが、投稿条件を注文することはできません。現在の順序は常に、変更、中止、失敗、成功、そして不安定です。
ただし、非常に便利なポスト条件があり、クリーンアップは常に最後に実行されます。https://jenkins.io/doc/book/pipeline/syntax/を参照してください
結局、私の投稿は次のようになりました:
post {
always {
}
success{
}
failure {
}
cleanup{
deleteDir()
}
}
うまくいけば、これはいくつかのコーナーケースに役立つかもしれません
次のパイプラインスクリプトを使用します。
pipeline {
agent { label "master" }
options { skipDefaultCheckout() }
stages {
stage('CleanWorkspace') {
steps {
cleanWs()
}
}
}
}
次の手順を実行します:
options { skipDefaultCheckout() }
少し速く実行するために追加します。
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()
}
}
}
}
このスニペットは、デフォルトのワークスペースでも機能します。
'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
クリーンアップ:PipelineのpostセクションはPipelineの実行の最後に実行されることが保証されているため、通知やその他のステップを追加して、ファイナライズ、通知、またはその他のEnd-of-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 */
}
}
}
私の場合、ビルドの最初に古いファイルを消去したいのですが、ソースコードがチェックアウトされているため、問題があります。
私の解決策は、(最後のビルドから)知らないファイルをすべて削除するようにgitに要求することです。
sh "git clean -x -f"
これにより、ビルドをクリーンに開始できます。ビルドが失敗した場合、ワークスペースはクリーンアップされないため、簡単にデバッグできます。
現在、Jenkins kubernetesプラグインを使用すると、deletedir()とcleanWs()の両方が正しく機能せず、ポッドワークスペースは削除されますが、マスターワークスペースは保持されます
チェックアウト詐欺の前にワークスペースをクリーンアップするステップがある場合、永続的なブランチでは問題になりません。基本的に同じワークスペースを何度も再利用します。ただし、マルチブランチパイプラインを使用する場合、マスターはワークスペース全体とgitディレクトリを保持します
これはジェンキンスの問題だと思います、ここで何か悟りはありますか?