Jenkins Maven Java 7 权限问题

Jenkins Maven Java 7 权限问题

我在 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/

相关内容