jenkins(四)問題記錄

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文件夾,此文件夾內的內容可以直接手動刪除;

另一個是workspace文件夾,次文件可以在界面刪除,
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章