docker 下运行 jenkins 的问题

2019-03-22 12:38:38 +08:00
 pipixia

因为官方 jenkins 附带的 java 是 openjdk

我想再安装一个官方版本的 jdk,maven 插件中也把这个新 jdk 的路径配置上去了

但是在运行打包的时候 怎么提示我文件找不到

6316 次点击
所在节点    Docker
10 条回复
yuikns
2019-03-22 12:53:11 +08:00
没看懂说明...
来个 Dockerfile 和 error message?
pipixia
2019-03-22 13:24:04 +08:00
@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
pipixia
2019-03-22 13:25:48 +08:00
@yuikns 我手动进入目录下 执行 java -version 是有效的 ,但是如果打全路径名像报错信息那样就会提示找不到文件
passerbytiny
2019-03-22 13:28:52 +08:00
首先,docker jenkins 只是一个专用来做部署的容器,没必要再独立安装 JDK。
其次,你的容器中, /var/jdk1.8.0_201 根本不存在,因为你只传过去了 tar.gz ,没解压。
pipixia
2019-03-22 13:41:12 +08:00
@passerbytiny 解压了 我特意去容器中执行了一下 您的意思是 docker Jenkins 不建议用来打包而是偏向部署这样吗?
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
你就别自己再折腾了
passerbytiny
2019-03-22 18:09:33 +08:00
@pipixia #5 jenkins 镜像原本就带 Java,你容器中执行的时候它使用的就是自带的 java,跟你额外添加的 JDK 没有关系。你自己添加的 JDK 就只有 jdk-8u201-linux-x64.tar.gz 这各文件。
colinsnow
2019-03-22 19:29:01 +08:00
ADD 本地的 tar 文件会自动解压的
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 可能不出现?
pipixia
2019-03-26 09:48:27 +08:00
@yuikns 和 jenkins 的人邮件讨论过 他说也可能是 openjdk 的基础镜像问题导致的 他的建议是换用其他 linux 发行版自定义 docker 镜像使用。经过测试 确实换用之后能正常打包运行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/547365

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX