這幾天一直試圖搞定Jenkins,最後發現Jenkins最後還是要執行Shell語句。筆者想了想,還不如自己製作一個Shell腳本簡單。
需要構建的工程爲QT工程,因此,自己製作的腳本應該有以下幾個目的:
1)對QT工程進行構建;
2)可以把構建過程的日誌進行輸出;
3)保證按週期獲得最新版本;
4)記錄程序運行的日期;
5)定時執行。
QT的構建,本身就是qmake 和 make 的結合,這個可以參照QT工程本身來完成;其實現過程,說白了就是把QT的pro文件讀取成Make file,再執行make。
更新最新代碼比較簡單,git工具強制覆蓋最新代碼即可。
然後,日誌寫入操作,並讓定時執行。
提供了兩個shell腳本,build.sh 和 run.sh。
build.sh如下所示:
#!/bin/bash
QMAKE=QT安裝目錄/gcc_64/bin/qmake
MAKE=/usr/bin/make(make安裝目錄)
GIT=/usr/bin/git(git安裝目錄)
BRANCH=origin/master(主分支,也可以是其他分支)
PRO_FILE=X.prp(QT工程文件)
PROJECT_PATH=工程下載路徑
MAKEFILE_FROMAT=linux-g++(Linux格式,也可以爲其他格式)
DES_PATH=編譯路徑
cd $PROJECT_PATH
$GIT fetch --all
$GIT reset --hard origin/master
$GIT pull
cd $DES_PATH
# make clean
$MAKE clean
# 生成Makefile
$QMAKE $PROJECT_PATH/$PRO_FILE -spec $MAKEFILE_FROMAT
#make運行
$MAKE
run.sh 如下所示:
#!/bin/bash
MAKE_FILE=生成的makeshell文件路徑/make.sh
MAKE_LOG=日誌路徑/makeLog.log
#PIPE方式
log_pipe() {
while read line; do
echo [$(date +%Y-%m-%d\ %H:%M:%S)] "$line"
done
}
# 保證運行不受打擾
exec nohup sh $MAKE_FILE | log_pipe > $MAKE_LOG 2 >> $MAKE_LOG &
然後,用超級用戶vim /etc/crontab,可見crontab上的說明:
# m h dom mon dow user command
也就是上面分別是定時任務的分、時、一個月的日期,月份,星期,用戶和命令,我的樣例如下
0 14 * * * (用戶) run文件的路徑/run.sh
保證文件每天下午2點執行。
任務完成。
也說明下,shell文件裏的shell函數,執行是沒有參數的,用()表示函數。