CI腳本異常退出問題的示例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹CI腳本異常退出問題的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)建站專注于營口網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供營口營銷型網(wǎng)站建設,營口網(wǎng)站制作、營口網(wǎng)頁設計、營口網(wǎng)站官網(wǎng)定制、小程序設計服務,打造營口網(wǎng)絡公司原創(chuàng)品牌,更為您提供營口網(wǎng)站排名全網(wǎng)營銷落地服務。

背景

在CI腳本中,使用類似如下腳本進行項目編譯的計時,但在執(zhí)行過程中,有時會出現(xiàn)CI腳本(命名為ci.sh)未完全執(zhí)行的情況:


#!/bin/bash -e

sleep_time=$1

start_time=`date "+%s"`
# do sth, this sleep would simulate project compilation
sleep $sleep_time
end_time=`date "+%s"`

process_time=`expr \( end_time - start_time \)`
echo "---- process time(sec) are: " $process_time "seconds"

# ...

這個腳本,只是模擬我們在CI中的程序,項目編譯前計時,項目編譯后再次計時,通過sleep休眠來模擬CI中項目編譯鎖消耗的時間,然后計算出消耗的時間。這個簡化的腳本邏輯很簡單,我們通過以下命令來調(diào)用:

# ./ci.sh
---- process time(sec) are: 2 seconds

這樣執(zhí)行好像并不會出錯,那實際CI中為什么會出錯呢?

分析

首先,我們發(fā)現(xiàn),當出現(xiàn)腳本未完全執(zhí)行完成時,不會打印“process time(sec) are”這一句,也就是說錯誤是這句之前引起的。

另外,細心的朋友還會發(fā)現(xiàn),在腳本的首行,我們給bash使用了-e參數(shù),這個參數(shù)的作用就是,一旦shell腳本中任何一行出現(xiàn)了錯誤,shell腳本就停止運行。所謂的出現(xiàn)錯誤,也就是這行語句的返回值為非零。那么,CI腳本未完全執(zhí)行的原因,很可能就是因為某一行語句出現(xiàn)了錯誤,導致腳本直接退出。

通過增加打印“echo $?”來打印上一行語句的執(zhí)行結果,很快定位到報錯的語句在計算處理時間的這一行:

process_time=`expr \( end_time - start_time \)` 

這一行看起來十分普通,只是簡單的用終止時間減去開始時間,然后賦值給process_time。為什么會返回非0值呢?

原來,expr命令有一個小小的trick,當expr表達式中的計算結果為0時,expr命令就會返回1,而不是通常的0。在我們實際的CI任務中,一旦某個項目編譯時間非常短,在1秒鐘內(nèi)完成,那么起止時間系統(tǒng),其差值也就為0,因此,expr就會返回非零值,而CI腳本也會因此而退出。

以上是“CI腳本異常退出問題的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

標題名稱:CI腳本異常退出問題的示例分析-創(chuàng)新互聯(lián)
當前鏈接:http://bm7419.com/article4/dscsie.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、用戶體驗定制開發(fā)、虛擬主機、云服務器、服務器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設