Jenkins :DirectoryNotEmptyException:.../lastSuccessful

标签 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

我们解压卷内的备份+重新创建了一个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

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

最佳答案

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

这也可能是因为这些是软链接(soft link)并且来自备份,它们可能被创建为目录。因此, Jenkins 无法删除它们。 如果删除或重命名这些目录,Jenkins 可以重新创建软链接(soft link)。

关于 Jenkins :DirectoryNotEmptyException:.../lastSuccessful,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37587641/

相关文章:

git - 我如何从 Jenkins 的 ${GIT_BRANCH} 中删除 "origin"?

Maven 和 Jenkins - 'mvn' 未被识别为内部或外部命令,

jenkins - 更改 Jenkins 中的作业顺序

docker - 是否有无服务器 kubernetes datadog 代理?

docker - 构建容器镜像时,列出构建上下文和/或 WORKDIR 中的所有文件

docker - .net 核心 - 使用 docker compose 构建错误

docker - docker 镜像的大小和虚拟大小有什么区别?

jenkins - 使用本地存储库在本地 jenkins 上运行作业

jenkins - 如何将 Jenkins API 响应限制为最后 n 个构建 ID

reactjs - dockerized React 应用程序中的 VSCode + Typescript