docker - 如何修复 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 帐户下。知道如何解决吗?
解决方案
这意味着在容器内部,运行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 用户或组的权限添加到该目录。
推荐阅读
- android - 无法在 android 设备中安装我相同的签名 apk 两次
- android - 如何为一个接受用户提供的报价并接受/拒绝/提供还价作为输出的 android 应用程序创建 AI?
- excel - 使用 Excel VBA 在 Outlook 邮件中粘贴的正文后插入签名
- mysql - MySQL中添加约束语法的区别?
- spring-boot - run() 上的 Spring Boot 语法
- c++ - 'C 不支持默认参数' 使用 Swift 桥接头
- html - 设置弹性项目的高度或根据内容扩展?
- reactjs - 使用 redux 反应原生导航 v3
- php - 在显示星级系统中使用 css 生成 PHP HTML
- javascript - javascript 在慢速互联网上无法在 html div 中工作