1、在jenkins命令行執行cd 命令無效
使用過程中,發現在commond中使用cd是無效的,此時針對不同的服務寫了不同的sh腳本,在內部去做目錄的切換。
解決方案:
使用source的方式是cd生效:
source /opt/esmp/jenkins/inbox-model.sh
2、啓動腳本的tail -f **log,導致build無法完成
在我們的start.sh腳本中,會調用日誌查看方法:
log() {
status
if [ ! -z "${pid}" ]; then
log=`lsof -p $pid | grep "logs/.*[0-9]*\.log"| awk '{print $NF}'`
tail -fn 100 $log
fi
}
tail 命令在執行腳本後不會自動停止,導致構建一支進行。
會一直輸出日誌,導致構建不能停止,提供一個監聽listener方法,一段時間後殺死日誌進程。
解決方案
如下腳本所示,在執行start.sh時,同時執行listener函數,每五秒去查看日誌進程的狀態,達到50s後,就殺死日誌進程,使腳本執行結束,同時項目構建完成。
#!/bin/bash
# 監聽日誌進程,一段時間後殺死日誌進程,完成構建
listener()
{
while true
do
sleep 5
num= `ps -ef | grep 'inbox_model-3.0.jar' | grep -v grep | wc -l`
flag= 1
echo "$num"
if [[ $num -eq $flag ]]; then
sleep 50
echo "項目已啓動,停止日誌打印";
ps -ef |grep "/logs/inbox_model" |grep -v grep|awk '{print $2}' |xargs kill
break;
else
echo "項目啓動中";
fi
done
}
sleep 5
cd /opt/esmp
# 當文件不存在,即首次部署此項目時,不需要stop
if [ -d "/opt/esmp/inbox-model-3.0" ];then
cd /opt/esmp/inbox-model-3.0
./start.sh stop
cd ../
rm -rf inbox-model-3.0
fi
unzip inbox-model-3.0-bin.zip
cd inbox-model-3.0
./start.sh start & listener
上述的50s可以根據項目實際啓動的時間去設置。
3、找不到MANIFEST.MF
構建過程中,可能會存在找不到MANIFEST.MF的問題,這個是start.sh腳本中獲取啓動參數的文件。找不同通常是在啓動構成中沒有生成。直接運行start.sh腳本沒有問題。
原因
jar: commond not found,在安裝jdk時候沒有建立軟連接,導致jar命令找不到。
解決方案
在/usr/bin目錄下創建jar的軟連接
cd /usr/bin
ln -s /usr/java/jdk1.8.0_172-amd64/bin/jar jar
4、環境變量不生效問題
發現在有些服務器沒有此問題,個別服務器存在腳本執行始終不生效的問題,還是環境變量導致的問題。
解決方案
在腳本中增加 source /etc/profile
5、硬盤被佔滿問題
jenkins構建過程很佔用硬盤空間,當硬盤被佔滿後,會導致無法構建、在配置中,git,SSH等憑證無法選擇而報錯,如果突然出現這樣的問題,可以考慮是硬盤的問題。
解決辦法
1)新建項目要選擇丟棄舊構建的參數,並將參數設置的小一點,通常來說歷史構建對我們來講是沒用的。
2)構建過程中有兩個文件佔用時很大的(以下兩種方式均不會影響後面額構建,通常清理job最有效):
一個是job文件夾,此文件夾內的內容可以直接手動刪除;