带有 docker agent 的 Jenkins 在安装 Maven 时找不到JAVA_HOME



我有一个声明性管道:

agent {
docker {
image 'myimage:latest'
reuseNode true
}
steps {
sh "mvn clean install"
}
}

错误为:

The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

这是Jenkins及其如何处理docker容器的问题,因为Jenkins环境之外的相同映像可以有效地执行maven清理和安装命令,而不会出现问题。

我不喜欢使用外部插件,我想采用一个普通的解决方案。有人面对过类似的事情吗?

非常感谢。

使用的Java版本:

$ java -version
openjdk version "1.8.0_302"
OpenJDK Runtime Environment (IcedTea 3.20.0) (Alpine 8.302.08-r1)
OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)

使用的Maven版本(从Jenkins环境外部输出(:

$ mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/share/java/maven-3
Java version: 1.8.0_302, vendor: IcedTea, runtime: /usr/lib/jvm/java-1.8-openjdk/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.10.104-linuxkit", arch: "amd64", family: "unix"

构建图像的我的dockerfilemyimage:

FROM amd64/alpine:3.14
RUN apk update
RUN apk add --no-cache openjdk8
RUN apk add --no-cache maven

在我的案例中,Jenkins控制器(内置节点,master(将环境变量传递到容器。。。因此,容器从控制器继承了整个env

因此,容器试图使用不适合该容器的JAVA_HOME

只需在构建容器时取消设置JAVA_HOME变量就可以修复错误。

agent {
docker {
image 'myimage:latest'
reuseNode true
}
steps {
sh "unset JAVA_HOME && mvn clean install"
}
}

最新更新