1. 程式人生 > >jenkins定時編譯節省測試用例執行時間

jenkins定時編譯節省測試用例執行時間

使用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

接下來走原有的執行邏輯~~