V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pipixia
V2EX  ›  Docker

docker 下运行 jenkins 的问题

  •  
  •   pipixia · 2019-03-22 12:38:38 +08:00 via Android · 6478 次点击
    这是一个创建于 2073 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为官方 jenkins 附带的 java 是 openjdk

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

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

    10 条回复    2019-03-26 09:48:27 +08:00
    yuikns
        1
    yuikns  
       2019-03-22 12:53:11 +08:00
    没看懂说明...
    来个 Dockerfile 和 error message?
    pipixia
        2
    pipixia  
    OP
       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
        3
    pipixia  
    OP
       2019-03-22 13:25:48 +08:00
    @yuikns 我手动进入目录下 执行 java -version 是有效的 ,但是如果打全路径名像报错信息那样就会提示找不到文件
    passerbytiny
        4
    passerbytiny  
       2019-03-22 13:28:52 +08:00
    首先,docker jenkins 只是一个专用来做部署的容器,没必要再独立安装 JDK。
    其次,你的容器中, /var/jdk1.8.0_201 根本不存在,因为你只传过去了 tar.gz ,没解压。
    pipixia
        5
    pipixia  
    OP
       2019-03-22 13:41:12 +08:00 via Android
    @passerbytiny 解压了 我特意去容器中执行了一下 您的意思是 docker Jenkins 不建议用来打包而是偏向部署这样吗?
    yuikns
        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
    你就别自己再折腾了
    passerbytiny
        7
    passerbytiny  
       2019-03-22 18:09:33 +08:00
    @pipixia #5 jenkins 镜像原本就带 Java,你容器中执行的时候它使用的就是自带的 java,跟你额外添加的 JDK 没有关系。你自己添加的 JDK 就只有 jdk-8u201-linux-x64.tar.gz 这各文件。
    colinsnow
        8
    colinsnow  
       2019-03-22 19:29:01 +08:00 via Android
    ADD 本地的 tar 文件会自动解压的
    yuikns
        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 可能不出现?
    pipixia
        10
    pipixia  
    OP
       2019-03-26 09:48:27 +08:00 via Android
    @yuikns 和 jenkins 的人邮件讨论过 他说也可能是 openjdk 的基础镜像问题导致的 他的建议是换用其他 linux 发行版自定义 docker 镜像使用。经过测试 确实换用之后能正常打包运行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2798 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:31 · PVG 15:31 · LAX 23:31 · JFK 02:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.