搞个大家一起用的Jenkins,30多个项目组建了500多个任务。有个节点的workspace所在盘只有100G,一来二去就满了。
下手处理。
其中一个点是:Jenkins的任务删掉了或者改名了,但是原来的Job workspace是不会删除的。
看了https://my.oschina.net/donhui/blog/677935这一篇,觉得思路可行,不过里面的Python不懂哇,写个Java版吧。
搞定后删掉了40G垃圾,洁癖如我,内心是欢喜的。
上代码。
目录结构
.\src\DelUnusedWS.java
.\bin\DelUnusedWS.class
.\lib\jenkins-cli.jar
.\runDelUnusedWS.cmd
runDelUnusedWS.cmd内容
java -classpath .\lib\jenkins-cli.jar;.\bin; DelUnusedWS http://*.*.*.*:8091/jenkins D:\jenkins\workspace
@pause
DelUnusedWS.java内容
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.OutputStream;
import java.net.URL;
import java.util.LinkedList;
import java.util.List;
import hudson.cli.CLI;
public class DelUnusedWS {
public static void deleteFile(File file) throws Exception {
if (file.isDirectory()) {
for (File f : file.listFiles()) {
deleteFile(f);
}
}
file.delete();
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String url = args[0];// Jenkins地址URL,例:"http://*.*.*.*:8091/jenkins";//
String wsDir = args[1];// Jenkins节点本地Workspace目录,例:“D:\jenkins\workspace”
System.out.println("url:" + url);
System.out.println("wsDir:" + wsDir);
List<String> arguments = new LinkedList<String>();
// arguments.add("create-view");
// arguments.add(viewname);
// arguments.add("--username");
// arguments.add(username);
// arguments.add("--password");
// arguments.add(password);
arguments.add("list-jobs");// 展示所有job
CLI cli = new CLI(new URL(url));
OutputStream output = new ByteArrayOutputStream();
int exit_code = cli.execute(arguments, null, output, System.err);
String s = output.toString();
System.out.println("jobs:" + s);
/* 主要逻辑:逐个验证本地workspace下的目录(即job名称)是否在刚查询到的任务名称清单中存在 */
File dir = new File(wsDir);
for (File f : dir.listFiles()) {
if (s.indexOf(f.getName() + '\n') == -1) {//为保证避免目录名是任务名的子串情况,加'\n'进行严格查找
System.out.println(f.getName() + " not exists!");
deleteFile(f);
if (f.exists()) {
System.out.println(f.getName() + " can 【not】 be deleted!");
} else {
System.out.println(f.getName() + " was deleted!");
}
}
}
System.out.println("Done!");
}
}