我在 Jenkins 中尝试进行 Maven 构建时收到此错误,
Building in workspace /var/lib/jenkins/workspace/xxxxprojectnamedeletedforprivacyxxxx
java.nio.file.AccessDeniedException: /usr/share/maven/lib/maven-settings-3.x.jar
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.implDelete(UnixFileSystemProvider.java:244)
at sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:103)
at java.nio.file.Files.delete(Files.java:1079)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at hudson.Util.deleteFile(Util.java:247)
at hudson.FilePath.deleteRecursive(FilePath.java:1202)
at hudson.FilePath.deleteContentsRecursive(FilePath.java:1211)
at hudson.FilePath.deleteRecursive(FilePath.java:1193)
at hudson.FilePath.deleteContentsRecursive(FilePath.java:1211)
at hudson.FilePath.deleteRecursive(FilePath.java:1193)
at hudson.FilePath.access$1000(FilePath.java:191)
at hudson.FilePath$14.invoke(FilePath.java:1172)
at hudson.FilePath$14.invoke(FilePath.java:1169)
at hudson.FilePath.act(FilePath.java:989)
at hudson.FilePath.act(FilePath.java:967)
at hudson.FilePath.deleteRecursive(FilePath.java:1169)
at hudson.tools.JDKInstaller.performInstallation(JDKInstaller.java:130)
at hudson.tools.InstallerTranslator.getToolHome(InstallerTranslator.java:68)
at hudson.tools.ToolLocationNodeProperty.getToolHome(ToolLocationNodeProperty.java:107)
at hudson.tools.ToolInstallation.translateFor(ToolInstallation.java:205)
at hudson.model.JDK.forNode(JDK.java:130)
at hudson.model.AbstractProject.getEnvironment(AbstractProject.java:351)
at hudson.model.Run.getEnvironment(Run.java:2219)
at hudson.model.AbstractBuild.getEnvironment(AbstractBuild.java:917)
at hudson.maven.AbstractMavenBuild.getEnvironment(AbstractMavenBuild.java:56)
at hudson.maven.MavenModuleSetBuild.getEnvironment(MavenModuleSetBuild.java:167)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:977)
at hudson.scm.SCM.checkout(SCM.java:484)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1270)
at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:609)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:531)
at hudson.model.Run.execute(Run.java:1718)
at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:531)
at hudson.model.ResourceController.execute(ResourceController.java:89)
at hudson.model.Executor.run(Executor.java:240)
Finished: FAILURE
我已经关注了这些链接,它们由 root 用户拥有,但具有 777 权限,因此每个人都可以关注该链接,真正的文件是每个人都可以读取的。所以不确定为什么会发生这种情况。有什么提示吗?
答案1
您是手动运行 Jenkins 还是通过服务运行?
不建议通过java -jar /usr/share/jenkins/jenkins.war
但使用手动运行它service jenkins start|stop
。
当您手动启动时,它会将所有者更改为jenkins.war
通过启动的用户java
,服务在 user:group 下运行jenkins:jenkins
。
Jenkins 服务(Debian/Ubuntu)的默认路径应该是,/var/lib/jenkins/jobs/<ProjectName>/workspace
并且里面的所有内容/var/lib/jenkins/
必须由用户jenkins
和组拥有jenkins
:
chown -R jenkins:jenkins /var/lib/jenkins/
还请检查您的 Jenkins 项目中是否正确安装并配置了 JDK。
答案2
似乎您正在尝试在构建过程中删除一个文件:
at java.nio.file.Files.delete(Files.java:1079)
您需要相应地调整权限,以允许对父路径和相关文件进行写访问。我个人建议您将所有者设置为 Jenkins 运行时的同一用户,并使用chmod -R u+w,go-w <directory>
设置权限以仅允许该用户进行修改。
答案3
如果我不得不猜测,看起来 maven 可能是由 root 安装的,因此由 root 拥有。
如果 jenkins 是通过任何包管理器安装的,则它很可能以“jenkins”用户身份运行,而该用户无权访问该 maven 安装。
只是一个想法 - 为什么不配置 jenkins 来安装/管理您想要使用的 maven 版本?
Jenkins 会将您正在寻找的 maven 版本放在它可以访问的位置(基于 /tools 路径)。
答案4
我在中创建了一个文件夹/opt
并设置了权限,但是必须在你的 Jenkins 中配置此路径:
sudo mkdir /opt/deploy_jenkins
sudo chmod -R a+rw deploy_jenkins/