Jenkins:DirectoryNotEmptyException:... / lastSuccessful

时间:2016-06-02 09:19:58

标签: jenkins docker

我们在Docker容器中运行Jenkins 1.651.1。 在某个时刻,我们决定将我们的容器移到另一个环境中。

我们有一个cron作业,可以创建容器卷的备份:

tar -cvpzf jenkins-backup.tar -C jenkins-volume/_data/ . --exclude ".m2"

在新环境中,我们创建了一个新的jenkins docker卷:

docker volume create --name jenkins-volume

我们untar我们在卷内的备份+重新创建了一个jenkins实例并将其与卷连接

除非我们有时会收到意外的“错误”消息,否则一切正常。它不会破坏任何东西,但经常出现:

Started by user ********
ln builds/lastSuccessfulBuild /var/jenkins_home/jobs/xxx/lastSuccessful failed
java.nio.file.DirectoryNotEmptyException: /var/jenkins_home/jobs/xxx/lastSuccessful
    at sun.nio.fs.UnixFileSystemProvider.implDelete(UnixFileSystemProvider.java:242)
    at sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:108)
    at java.nio.file.Files.deleteIfExists(Files.java:1165)
    at sun.reflect.GeneratedMethodAccessor473.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at hudson.Util.createSymlinkJava7(Util.java:1233)
    at hudson.Util.createSymlink(Util.java:1151)
    at hudson.model.Run.createSymlink(Run.java:1840)
    at hudson.model.Run.updateSymlinks(Run.java:1821)
    at hudson.model.Run.execute(Run.java:1736)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:410)
ln builds/lastStableBuild /var/jenkins_home/jobs/xxx/lastStable failed
java.nio.file.DirectoryNotEmptyException: /var/jenkins_home/jobs/xxx/lastStable
    at sun.nio.fs.UnixFileSystemProvider.implDelete(UnixFileSystemProvider.java:242)
    at sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:108)
    at java.nio.file.Files.deleteIfExists(Files.java:1165)
    at sun.reflect.GeneratedMethodAccessor473.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at hudson.Util.createSymlinkJava7(Util.java:1233)
    at hudson.Util.createSymlink(Util.java:1151)
    at hudson.model.Run.createSymlink(Run.java:1840)
    at hudson.model.Run.updateSymlinks(Run.java:1822)
    at hudson.model.Run.execute(Run.java:1736)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:410)
[EnvInject] - Loading node environment variables.
Building in workspace /var/jenkins_home/jobs/xxx/workspace
 > git rev-parse --is-inside-work-tree # timeout=10
... and it works further and fine

解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

如CSchulz所评论,您可以删除目录,并根据构建结果创建这些目录。

这也可能是因为这些是软链接&从备份中,这些可能会被创建为目录。因此,詹金斯无法删除它们。 如果删除或重命名这些目录,Jenkins就可以重新创建软链接。