We got a lot of following error msg from slave log after upgrading our Jenkins to 2.32.2, git-client to 2.2.1, git plugin to 3.0.1, scm api plugin to 2.0
Feb 09, 2017 7:19:42 AM hudson.Util makeWritable
INFO: Failed to chmod /
No directory specified for FileSet.
at org.apache.tools.ant.types.AbstractFileSet.getDirectoryScanner(AbstractFileSet.java:479)
at org.apache.tools.ant.taskdefs.ExecuteOn.runExec(ExecuteOn.java:370)
at org.apache.tools.ant.taskdefs.ExecTask.execute(ExecTask.java:498)
at org.apache.tools.ant.taskdefs.Chmod.execute(Chmod.java:181)
at hudson.Util.makeWritable(Util.java:314)
at hudson.Util.tryOnceDeleteFile(Util.java:283)
at hudson.Util.tryOnceDeleteRecursive(Util.java:364)
at hudson.Util.tryOnceDeleteContentsRecursive(Util.java:383)
at hudson.Util.deleteContentsRecursive(Util.java:223)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$2.execute(CliGitAPIImpl.java:455)
at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:152)
at org.jenkinsci.plugins.gitclient.RemoteGitImpl$CommandInvocationHandler$1.call(RemoteGitImpl.java:145)
at hudson.remoting.UserRequest.perform(UserRequest.java:153)
at hudson.remoting.UserRequest.perform(UserRequest.java:50)
at hudson.remoting.Request$2.run(Request.java:336)
at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
It seems like jenkins slave or git client plugin tries to delete / recursively.
And there was no job running on this slave at the time these errors were logged.
The result is a disaster, all files owned by the jenkins user were deleted, including its home directory.
Any jenkins expert out there knows why this could happen and how to prevent it happening again? Right now it seems to happen every two days, removing everything it can under /.