首页 > 解决方案 > 如何修复 Jenkins 中的 Maven 权限问题

问题描述

我将 Jenkins 安装为 docker 容器。在 Jenkins 全局工具配置中添加 MAVEN_HOME (/usr/share/maven) 并选中“自动安装”。当我按下 Build Now 时,出现此错误:

Running as SYSTEM
Building in workspace /var/jenkins_home/workspace/MavenProject
[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Deferred wipeout is used...
[WS-CLEANUP] Done
java.nio.file.AccessDeniedException: /usr/share/maven
    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.createDirectory(UnixFileSystemProvider.java:384)
    at java.nio.file.Files.createDirectory(Files.java:674)
    at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781)
    at java.nio.file.Files.createDirectories(Files.java:767)
    at hudson.FilePath.mkdirs(FilePath.java:3299)
    at hudson.FilePath.access$1300(FilePath.java:212)
    at hudson.FilePath$Mkdirs.invoke(FilePath.java:1252)
    at hudson.FilePath$Mkdirs.invoke(FilePath.java:1248)
    at hudson.FilePath.act(FilePath.java:1076)
    at hudson.FilePath.act(FilePath.java:1059)
    at hudson.FilePath.mkdirs(FilePath.java:1244)
    at hudson.FilePath.installIfNecessaryFrom(FilePath.java:907)
Caused: java.io.IOException: Failed to install https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip to /usr/share/maven...

我没有 /var/jenkins_home/workspace/MavenProject 目录。此目录位于具有完全权限的 root 帐户下。知道如何解决吗?

标签: dockermavenjenkins

解决方案


这意味着在容器内部,运行Jenkins的用户帐户没有写入权限来/usr/share/maven写入下载的maven版本。该目录不存在,或者它可能归根用户所有。

您可以通过在容器上以 root 身份启动交互式 shell 来手动创建此目录:

docker exec -u 0 -ti name_of_container sh

然后在这个 shell 上(不是在主机上!)

mkdir -p /usr/share/maven
chmod 777 /usr/share/maven

或者在你的 Dockerfile

RUN mkdir -p /usr/share/maven
RUN chmod 777 /usr/share/maven

这些示例只是为了简单起见,最好将 Jenkins 用户或组的权限添加到该目录。


推荐阅读