【Jenkins 】配置从节点之后,环境配置
Jenkins 从节点环境配置
- 1. ERROR: Maven Home /usr/local/maven doesnt exist
- java.io.IOException: Cannot run program "/usr/local/openjdk-8/bin/java" (in directory "/home/jenkins/workspace/workspace/dev-tp-manager-backend/tp-manager-backend"): error=2
- 2. The JAVA_HOME environment variable is not defined correctly
- 3. 从节点环境变量未正常识别
1. ERROR: Maven Home /usr/local/maven doesnt exist
需要配置Maven环境,并且有一点需要注意的是,如果是用 Docker 启动的 Jenkins,从节点需要配置的 maven 目录需要跟 容器内 Maven 配置一样。
比如我这里运行 Jenkins 容器时,将Maven目录挂载出来了。容器内 Maven 路径为:/usr/local/maven,那么在从节点上,也需要在此路径下整个Maven。
由于主节点直接把maven挂载出来了,我这里直接 Copy 主节点的 Maven目录到从节点,然后构建步骤就可以正常使用Maven了。
java.io.IOException: Cannot run program “/usr/local/openjdk-8/bin/java” (in directory “/home/jenkins/workspace/workspace/dev-tp-manager-backend/tp-manager-backend”): error=2
原因:Java环境变量不一致。
由于 Jenkins 内部默认使用的是 OpenJDK ,但是从节点上安装的Oracle的JDK。虽然配置了环境变量,但是Jenkins默认走的还是 OpenJdk。
这里将容器内部的 OpenJdk-8 给 copy 出来,然后传到从节点。
查看容器:
[root@localhost soft]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f402c2baab1 jenkinszh/jenkins-zh "/sbin/tini -- /usr/…" 16 months ago Up 2 weeks 0.0.0.0:50000->50000/tcp, 0.0.0.0:9999->8080/tcp jenkins
拷贝容器文件夹 openjdk-8 到宿主机目录:/usr/soft
docker cp jenkins:/usr/local/openjdk-8 /usr/soft/
将 OpenJdk 传到从节点上:scp -r openjdk-8 root@192.168.104.5:/usr/local/
接着再次构建,可以看到正常构建了。
2. The JAVA_HOME environment variable is not defined correctly
编译 Java 环境时异常,提示环境变量异常
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
此时我已确认 /etc/profile 文件和 ~/.bashrc 文件都包含了 JAVA_HOME 这个环境变量了,但是还是不行。
最后排查全局变量里面有个配置:JAVA_HOME 路径是另一个从节点的路径,导致当前从节点的环境变量被覆盖了。
在运行阶段查看环境变量可以使用: sh 'printenv' 部分日志如下:

3. 从节点环境变量未正常识别
如果是在主节点上 Launch Agent 连接的从节点,则需要配置:
进入 Jenkins 节点配置 → 「Launch method」选择「Launch agent via SSH」→ 点击「高级」。
在「Prefix Start Agent Command」中添加加载命令,强制加载 /etc/profile 输入 source /etc/profile &&

配置完成后,还需要先断开此节点: Jenkins 节点配置 → 断开连接 → 让该节点临时下线



最后再次上线:

再次查看环境变量:

