因为官方 jenkins 附带的 java 是 openjdk
我想再安装一个官方版本的 jdk,maven 插件中也把这个新 jdk 的路径配置上去了
但是在运行打包的时候 怎么提示我文件找不到
1
yuikns 2019-03-22 12:53:11 +08:00
没看懂说明...
来个 Dockerfile 和 error message? |
2
pipixia OP @yuikns
您好 信息如下 Dockerfile: FROM jenkins USER root ADD jdk-8u201-linux-x64.tar.gz /var ENV JAVA_HOME /var/jdk1.8.0_201 ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/jdk1.8.0_201/bin:/var/jdk1.8.0_201/bin Error: Established TCP socket on 45516 [qf_build] $ /var/jdk1.8.0_201/bin/java -cp /var/jenkins_home/plugins/maven-plugin/WEB-INF/lib/maven35-agent-1.12.jar:/var/tools/apache-maven-3.6.0/boot/plexus-classworlds-2.5.2.jar:/var/tools/apache-maven-3.6.0/conf/logging jenkins.maven3.agent.Maven35Main /var/tools/apache-maven-3.6.0 /var/jenkins_home/war/WEB-INF/lib/remoting-3.27.jar /var/jenkins_home/plugins/maven-plugin/WEB-INF/lib/maven35-interceptor-1.12.jar /var/jenkins_home/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.12.jar 45516 ERROR: Failed to parse POMs java.io.IOException: Cannot run program "/var/jdk1.8.0_201/bin/java" (in directory "/var/jenkins_home/workspace/qfs_build"): error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) at hudson.Proc$LocalProc.<init>(Proc.java:249) at hudson.Proc$LocalProc.<init>(Proc.java:218) at hudson.Launcher$LocalLauncher.launch(Launcher.java:936) at hudson.Launcher$ProcStarter.start(Launcher.java:455) at hudson.maven.AbstractMavenProcessFactory.newProcess(AbstractMavenProcessFactory.java:278) at hudson.maven.ProcessCache.get(ProcessCache.java:236) at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:804) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504) at hudson.model.Run.execute(Run.java:1810) at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:429) Caused by: java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:247) at java.lang.ProcessImpl.start(ProcessImpl.java:134) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) ... 12 more Finished: FAILURE |
3
pipixia OP @yuikns 我手动进入目录下 执行 java -version 是有效的 ,但是如果打全路径名像报错信息那样就会提示找不到文件
|
4
passerbytiny 2019-03-22 13:28:52 +08:00
首先,docker jenkins 只是一个专用来做部署的容器,没必要再独立安装 JDK。
其次,你的容器中, /var/jdk1.8.0_201 根本不存在,因为你只传过去了 tar.gz ,没解压。 |
5
pipixia OP @passerbytiny 解压了 我特意去容器中执行了一下 您的意思是 docker Jenkins 不建议用来打包而是偏向部署这样吗?
|
6
yuikns 2019-03-22 13:52:44 +08:00
ADD 后没有解压。
Dockerfile 里面完全没这个。 你在容器( container )里面执行,和 image 没有任何关系。 https://github.com/jenkinsci/docker/blob/587b2856cd225bb152c4abeeaaa24934c75aa460/Dockerfile 看人家 jenkins,它的 upstream 就是 openjdk:8-jdk,不需要再来自己 ADD 一遍。 openjdk:8-jdk 的 dockerfile https://github.com/docker-library/openjdk/blob/c3023e4da10d10e9c9775eabe2d7baac146e7ae1/8/jdk/Dockerfile 人家已经设置了 ENV JAVA_HOME /docker-java-home 你就别自己再折腾了 |
7
passerbytiny 2019-03-22 18:09:33 +08:00
@pipixia #5 jenkins 镜像原本就带 Java,你容器中执行的时候它使用的就是自带的 java,跟你额外添加的 JDK 没有关系。你自己添加的 JDK 就只有 jdk-8u201-linux-x64.tar.gz 这各文件。
|
8
colinsnow 2019-03-22 19:29:01 +08:00 via Android
ADD 本地的 tar 文件会自动解压的
|
9
yuikns 2019-03-23 05:53:25 +08:00
@colinsnow @passerbytiny
https://docs.docker.com/engine/reference/builder/#add : If <src> is a local tar archive in a recognized compression format (identity, gzip, bzip2 or xz) then it is unpacked as a directory. 学习了!我自己基于 fedora 和 openjdk:8-jdk 写了下 Dockerfile,的确可以在那个目录产生对应文件,而且貌似也能跑。 因此有理由相信 ADD 那一层 layer 后 /var/jdk1.8.0_201/bin/java 应该是没有问题的。只是一个比较显著的问题,楼主用 /docker-java-home/bin/java,它的版本也是 1.8.0_181-8u181-b13-2~deb9u1-b13 64 bit,应该完全就够了。不必额外添加。 此外,我故意用一个错误的目录,报错如下: /bin/sh: 1: /docker-java-home/bin2/java: not found The command '/bin/sh -c /docker-java-home/bin2/java -version' returned a non-zero code: 127 因此那个 java.io.IOException: Cannot run program "/var/jdk1.8.0_201/bin/java" (in directory "/var/jenkins_home/workspace/qfs_build"): error=2, No such file or directory 这个的意思是不是说 qfs_build 这个 workspace 不存在啊? 可以在这个提示错误的 layer 前面试试 RUN ls -al /var/jenkins_home/workspace/ qfs_build 可能不出现? |