jenkins定時編譯節省測試用例執行時間
阿新 • • 發佈:2019-02-08
使用jenkins定時編譯結果執行自動化測試。
當自動化測試的用例較多時,每次執行都重新編譯build會浪費一些時間,並且會有程式碼提交不對等原因導致工程build失敗的情況,影響正常自動化測試工作的進行。現已有持續整合定時build監控任務,這篇部落格是說怎麼將持續整合的編譯結果利用了起來。
思路如下:
註釋:
- 1.git工程有改動時jenkins定時構建
這個是持續整合之前一直有的任務,每5分鐘監測下git的java測試工程有沒有新的commits,有的話進行編譯,編譯狀態改變觸發郵件(成功->失敗,失敗->成功)
- 2.build後內容按build_number儲存
之所以按照build_number進行儲存,是為了之後獲取成功編譯的build_number號碼之後可以獲得相應的class檔案。工程是採用了WeTest框架,ant執行方式。Jenkins中的構建命令如下
cp /data1/WeTest/antbuild_retry/build.xml ${WORKSPACE}/git_build_${BUILD_NUMBER}
ant -buildfile ${WORKSPACE}/git_build_${BUILD_NUMBER}/build.xml
- 3.執行自動化測試腳更新本地工程
將更新取回本地
git fetch -q
- 4.判斷工程改動時間和jenkins最近lastBuild的時間
獲取工程最新的改動時間,shell指令碼命令如下
# %at 日期以時間戳的格式輸出, 如1490237959
dateGit=`git log origin/master --pretty=format:"%at" -1`
獲取jenkins最新的build時間
#時間戳多三位,去除最後三位
date1=`curl -u "test:test" http://ip:port/jenkins/job/git_build/lastBuild/api/json -s |jq ".timestamp"`
dateJenkins=$((date1/1000))
因為持續整合有5分鐘的時間差,並且防止持續整合出問題,自動化執行保留願有邏輯。
如果工程改動時間早於jenkins最近lastBuild的時間,說明最新程式碼已build,走新邏輯--使用持續整合的結果。工程改動時間大於jenkins最近lastBuild的時間,說明最新程式碼沒有build,走原有邏輯--拉最新的git程式碼,編譯並執行
判斷指令碼如下
if [ $dateJenkins -ge $dateGit ]; then
echo "最新程式碼已build"
initNoBuild $ip $port
else
echo "最新程式碼沒有build"
initHasBuild $ip $port
fi
- 5.獲取最近的成功number號lastSuccessfulBuild
走新邏輯時需要獲取最新一次build成功的buildNumber
#獲得最新的buildnumber
num=`curl -u "test:test" http://ip:port/jenkins/job/git_build/lastSuccessfulBuild/buildNumber -s`
echo "gitNumber" $num
- 6.複製此number下的class檔案及配置檔案進行執行
#拷貝持續整合中已經build的檔案 //不拉程式碼
cp -rf /data1/jenkins/jenkins_root/workspace/git_build/git_build_$num/* $local_path
接下來走原有的執行邏輯~~