Jenkins-K8s动态部署Slave过程踩过坑
最近基于K8S集群部署jenkins,想着都已经上K8S了,为啥不基于Kubernetes实现动态Agent构建机制呢?部署过程的文档后面有空再补吧~
于是乎,在部署过程中,遇到一个大坑吧,就记录一下。
问题1:mvn 找不到 JAVA_HOME
出现的错误
[Pipeline] sh
+ mvn -v
The JAVA_HOME environment variable is not defined correctly,
this environment variable is needed to run this program
具体过程
因为动态部署jenkins-Slave,官方镜像是 jenkins/inbound-agent(以前是 jenkinsci/jnlp-slave and jenkins/jnlp-slave)
但是问题是官方镜像里面并没有一些必要的环境(maven/kubectl/),为了方便使用,就自定义一个新的镜像,问题点就开始了~新的镜像 docker run
测试 maven环境/java环境是可用的,但是流水线启动跑,就报错。这个找了我一个晚上+一个上午(哭死!!!!!!)
解决
- 查找镜像
dockerfile
哪里不规范 -->没问题 - 查找流水线是否有问题 --> 也是莫得问题
- 进入pod容器,查看
env
--> 发现问题,JAVA_HOME
环境变量的路径不对!
看到是环境变量不对导致的,那就进一步检查是不是设置jenkins-slave
的Pod Templates
设置问题(未设置),排除了自定义镜像的问题;剩下基本上就是Jenkins-master
全局环境设置导致问题了?查看,确实!删除环境变量。重新跑,问题解决!影响问题是jenkins的全局环境变量导致的
问题2:自定义镜像启动假死情况
出现问题及过程
情况就是Jenkins流水线起了Pod之后,一直假死,未执行任何步骤问题,检查是不是设置jenkins-slave
的Pod Templates
设置问题,查看运行的命令和参数是否覆盖了启动参数!因为镜像启动是ENTRYPOINT ["jenkins-slave"]
解决
如果容器名称为:jnlp
,则会覆盖jenkins官方自带容器,因此记得设置运行命令和命令参数为空即可解决