1. 程式人生 > >Jenkins 更新主目錄問題及解決方案記錄

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