jenkins Maven管道无法找到JDK

bxpogfeg  于 2023-01-20  发布在  Jenkins
关注(0)|答案(3)|浏览(315)

我在运行一个简单的Java Maven管道时遇到了问题。由于未知原因,使用的Maven命令在使用预期的JDK时失败。

  • 新安装的Jenkins运行从docker图像jenkinsci/blueocean:最新
  • 在Jenkins工具设置窗格中配置了Oracle JDK 9和Maven 3.5.4

Jenkins文件内容:

pipeline {
      agent any
      tools {
        jdk 'java9'
        maven 'Maven3.5'
      }
      stages {
        stage ('Initialize') {
          steps {
            sh '''
              echo "PATH = ${PATH}"
              echo "M2_HOME = ${M2_HOME}"
              echo "JAVA_HOME = ${JAVA_HOME}"
            '''
          }
        }
        stage ('Build') {
          steps {
            sh 'java -version'
            sh 'mvn --version'
          }
        }
      }
    }

"初始化"阶段脚本的输出

PATH = /var/jenkins_home/tools/hudson.model.JDK/java9/bin:/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/Maven3.5/bin:/var/jenkins_home/tools/hudson.model.JDK/java9/bin:/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/Maven3.5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin

M2_HOME = /var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/Maven3.5

JAVA_HOME = /var/jenkins_home/tools/hudson.model.JDK/java9

在我看来这是有效的。M2_HOME和JAVA_HOME指向Jenkins工具的预期路径。
"构建""java版本"脚本的输出

+ java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (IcedTea 3.10.0) (Alpine 8.191.12-r0)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

这似乎是Jenkins Docker主机系统的已安装Java
"构建""mvn-版本"脚本的失败输出:

mvn --version
/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/Maven3.5/bin/mvn: exec: line 191: /var/jenkins_home/tools/hudson.model.JDK/java9/bin/java: not found
script returned exit code 127

如果我猛击Jenkins Docker容器,我会在上面提到的路径中找到java bin。
我错在哪里?为什么美芬找不到 java ?
是权限问题吗?Jenkins Docker容器使用Docker卷:-v jenkins-data:/var/jenkins_home.
贝斯特拉尔斯

mklgxw1f

mklgxw1f1#

不确定Jenkins管道中的工具+ Docker 是否工作得很好。
参见:https://issues.jenkins-ci.org/browse/JENKINS-36159
到目前为止,我设法使其工作的唯一方法是将docker节点的工具目录挂载到docker从节点中。
例如:
代理{docker参数'-v $主页/工具:/var/lib/jenkins/工具'
阶段{步骤{sh "${MAVEN_HOME}/bin/mvn-版本"
编辑:刚刚也找到了这个:https://issues.jenkins-ci.org/browse/JENKINS-48050

k4ymrczo

k4ymrczo2#

你不需要这两个工具。有Maven工具就足够了。它包括Java。你的管道应该是:

pipeline {
  agent any
  tools {
    maven 'Maven3.5'
  }
  stages {
    stage ('Initialize') {
      steps {
        sh '''
          echo "PATH = ${PATH}"
          echo "M2_HOME = ${M2_HOME}"
          echo "JAVA_HOME = ${JAVA_HOME}"
        '''
      }
    }
    stage ('Build') {
      steps {
        sh 'java -version'
        sh 'mvn --version'
      }
    }
  }
}

并且您可以在Jenkins配置工具中删除Java Tool。

cbjzeqam

cbjzeqam3#

当你为jenkins使用基于alpine的docker镜像,而你的jdk是基于glibc的时候,这个问题就会出现,你可以用两种方法来解决这个问题:
1.使用一个基于musl的jdk。你可以在adoptium上通过过滤出操作系统Alpine Linux来找到它们。
1.使用非基于alpine的docker图像。

相关问题