Jenkinsのワークスペースをクリーンアップするにはどうすればよいですか?バージョン管理ツールとしてAccuRev
を使用しています。
Jenkinsでfreestyle
プロジェクトを作成しました。
Jenkinsのワークスペースをクリーンアップする方法があります。ビルド前またはビルド後にワークスペースをクリーンアップできます。
まず、 Workspace Cleanup Plugin をインストールします。
ビルド前にワークスペースをクリーンアップするには:ビルド環境、の下にあるチェックボックスをオンにしますビルド開始前にワークスペースを削除します。
ビルド後にワークスペースをクリーンアップするには:見出しの下でビルド後のアクションを選択しますビルド完了時にワークスペースを削除からビルド後のアクションを追加 =ドロップダウンメニュー。
上記のソリューションに加えて、より「一般的な」方法があります-Linuxマシンから最大のスペース消費者を直接削除します。以下の手順を実行できます。
Ls -lartを使用して隠しフォルダーもリストします。通常、jenkinインストールは.jenkins /フォルダーに配置されます。
[xxxxx ~]$ ls -lart drwxrwxr-x 12 xxxx 4096 Feb 8 02:08 .jenkins/
Use df -h
はディスク領域を高レベルで表示します
du -sh ./*/
は、現在のパスの各サブフォルダーの合計メモリをリストします。
du -a /etc/ | sort -n -r | head -n 10
は、/ etc /のディスク容量を消費している上位10個のディレクトリをリストします
通常、。/ job /フォルダーまたは./workspace/フォルダーが最大のフォルダーになります。中に入り、必要に応じてベースを削除してください(フォルダー全体を削除しないでください)。
rm -rf theFolderToDelete
Jenkinsの管理→スクリプトコンソールで以下のスクリプトを実行して、すべてのジョブのワークスペースを一度に削除できます。これは、ファイルシステムのスペースをクリーンアップするために行いました。
import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
// check that job is not building
if(!item.isBuilding()) {
println("Wiping out workspace of job "+item.name)
item.doDoWipeOutWorkspace()
}
else {
println("Skipping job "+item.name+", currently building")
}
}
重要:ジョブが現在実行されていない限り、特定のJenkinsジョブのワークスペースを削除しても安全です!
注:$JENKINS_HOME
がデフォルトの/var/jenkins_home
に設定されていると仮定しています。
rm -rf /var/jenkins_home/workspaces/<workspace>
rm -rf /var/jenkins_home/workspaces/*
これはgrepを使用してホワイトリストを作成します。
ls /var/jenkins_home/workspace \
| grep -v -E '(job-to-skip|another-job-to-skip)$' \
| xargs -I {} rm -rf /var/jenkins_home/workspace/{}
これはduおよびsortを使用して、ワークスペースを最大から最小の順にリストします。次に、headを使用して最初の10個を取得します。
du -d 1 /var/jenkins_home/workspace \
| sort -n -r \
| head -n 10 \
| xargs -I {} rm -rf /var/jenkins_home/workspace/{}
上記のオプションが表示される前に、このプラグインをインストールする必要があります
このプラグインは、すべてのジョブ構成にチェックボックスを追加して、ステップ(ソース管理を含む)が実行される前にワークスペース全体を削除できるようにします
これは、ビルドの実行方法を保証するために、常に既知のポイントから開始することを確認するのに役立ちます
したがって、コメントは許可されていません。
pen からの答えは問題なく機能しますが、Jenkins Pipeline JobsとFreestyle Jobsが混在している場合はうまくいきません。パイプラインジョブにはDoWipeWorkspaceなどのメソッドはありません。そこで、これらをスキップするためにスクリプトを変更しました。
import hudson.model.*
import org.jenkinsci.plugins.workflow.job.WorkflowJob
// For each project
for(item in Hudson.instance.items) {
// check that job is not building
if(!item.isBuilding() && !(item instanceof WorkflowJob))
{
println("Wiping out workspace of job "+item.name)
item.doDoWipeOutWorkspace()
}
else {
println("Skipping job "+item.name+", currently building")
}
}
必要に応じて、ジョブ名でフィルタリングすることもできます:item.getDisplayName().toLowerCase().contains("release")
現在のジョブのワークスペースのクリーニングに関する質問であると仮定すると、次を実行できます。
test -n "$WORKSPACE" && rm -rf $WORKSPACE/*