Jenkins 更新主目录问题及解决方案记录

最近jenkins服务器做build的时候发现有问题,显示“pending - waiting for next executor”,检查发现home directory磁盘空间已经只剩100多MB,于是决定更换home directory, 在这个过程中走了一些弯路,记录一下历程,以供他人参考。

切换home directory 历程

jenkins 安装背景

系统: 14.04.1-Ubuntu
该jenkins服务器并没有使用tomcat做代理,安装方法是直接通过 apt-get install,没有额外配置,也没有使用tomcat部署war包。

常规流程

正常更换home directory方法十分简单, 官方文档https://wiki.jenkins-ci.org/display/JENKINS/Administering+Jenkins 说,只需停掉jenkins,修改 JENKINS_HOME 变量指向新的目录,并将原有路径下的文件拷贝至新路径,重启即可。
说的这么简单啊摔!!!

九曲弯路

修改JENKINS_HOME 环境变量不work

export JENKINS_HOME=NEW_HOME_DIR
sudo service jenkins start

使用ps -aux|grep jenkins 查看启动参数,发现home directory依旧指向原有的路径。

找到home directory取值来源的配置文件

最初由于不清楚部署的人是如何部署的,误以为是将war部署在tomcat服务器运行的,因此找了半天的jenkins.xml、jenkins.conf类似的配置文件,浪费了许久,到最后排除才知道是直接install之后 用service运行。因此,首先搞清楚jenkins是怎么安装和部署的很重要。
后来查看/etc/init.d/jenkins 发现原来环境变量赋值有额外的一步

 head -n 40 /etc/init.d/jenkins

可以看到以下几句:

PATH=/bin:/usr/bin:/sbin:/usr/sbin

DESC=”Jenkins Continuous Integration Server”
NAME=jenkins
SCRIPTNAME=/etc/init.d/$NAME

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

#DAEMON=$JENKINS_SH
DAEMON=/usr/bin/daemon
DAEMON_ARGS=”–name=$NAME –inherit –env=JENKINS_HOME=$JENKINS_HOME ->-.output=$JENKINS_LOG –pidfile=$PIDFILE”

猜测在[ -r /etc/default/$NAME ] && . /etc/default/$NAME 这一句中可能执行了JENKINS_HOME的赋值。
于是查看/etc/default/jenkins文件, 可以看到以下变量赋值语句

# jenkins home location
JENKINS_HOME=xxx

这才发现home directory的配置来源。于是修改该文件。

无法修改配置文件

用vim 显示以下错误

jenkins@xxx:/etc/init.d$ sudo vim /etc/default/jenkins
Usage: /etc/init.d/sudo {start|stop|restart|force-reload|status}

觉得莫名其妙,发现原来是因为在/etc/init.d目录下执行的缘故,换到另外一个目录下运行就可以编辑了。

503 错误

当配置文件修改保存之后,重启jenkins,发现jenkins终于指向了新的路径,但是页面加载缺显示503 错误
查看jenkins log(ps 命令行中有参数指明log地址),发现log中有以下错误信息:

SEVERE: Failed to initialize Jenkins
hudson.util.HudsonFailedToLoad: org.jvnet.hudson.reactor.ReactorException: java.io.IOException: Unable to read /aa/bb/jen
kins_home/config.xml

然后check home directory 文件夹权限和用户组,发现都是root:root (jenkins运行用户是jenkins, 不是root),然而使用chown修改用户和用户组无效,经过查询之后发现问题在于我选择的新的home directory。
因为之前担心磁盘使用空间问题,所以想把home directory放在空间充足的挂载的共享目录(NTFS分区,check link: cant-apply-chmod-to-a-file)下面,然而chown失败的原因即在此!!!
后来换了个本地的其他磁盘空间来作为新的home directory。

新home directory的问题

重新修改了jenkins 配置文件指向新的目录之后,启动jenkins 后,页面依然报错,这次查看log有以下错误信息:

WARNING: Failed to record boot attempts
java.io.FileNotFoundException: /xx/yy/jenkins_home/failed-boot-attempts.txt (Permission denied)

后来才突然意识到可能/xx/yy/jenkins_home 目录本身的用户组可能也有问题,结果一看果然都是root:root,chown后,jenkins页面终于正常加载了! T_T好心塞……

依旧 waiting for next executor->node状态

折腾完新的home directory之后,赶紧试着起了个build,结果发现心塞again
依然显示waiting for next executor. 觉得比较奇怪才想起来去看看node的状态(后知后觉T_T)
结果看到master node明明白白地写着/tmp空间不足,处于offline状态,只能怪自己思维定势,因为别人说空间不足要迁主目录就这么去做了,也没好好研究下全部的原因。将/tmp清除后重启jenkins,然后就可以正常做build了。


总结一下这个曲折的过程,感觉遇到这类问题要注意以下几个点:
1)首先查看节点状态
2)明确配置文件路径
3)确保新的home directory所属的用户和用户组无误

当然了一般人不会有我这么曲折的……sigh

你可能感兴趣的:(工具类)