Sky's blog

          我和我追逐的夢

          常用鏈接

          統(tǒng)計

          其他鏈接

          友情鏈接

          最新評論

          解決jenkins執(zhí)行sonar時重復執(zhí)行兩次test的問題

              在jenkins上建立了一個job,通過標準的maven命令來執(zhí)行打包測試和上傳artifact到nexus倉庫。mvn 命令為標準格式: clear deploy。

              隨后考慮到需要執(zhí)行sonar,第一個解決方案是在jenkins中新建一個名為***_sonar的job,執(zhí)行命令sonar:sonar。在原有job上通過設(shè)置Post-build Action / Build other projects, 將***_sonar加入到 Projects to build,實現(xiàn)sonar job的在原有job執(zhí)行后觸發(fā)。當時需要勾選"Trigger only if build succeeds",避免構(gòu)建失敗的時候也觸發(fā)sonar的執(zhí)行。

              這個方案運行正常,但是隨后發(fā)現(xiàn)有些性能問題:sonar的job執(zhí)行時,需要重新update SCM,然后需要再次執(zhí)行test,之后才能進行真正屬于sonar的任務如代碼檢測等。明顯update SCM 和執(zhí)行test是重復了原有job,純屬浪費。這個重復執(zhí)行問題隨著測試案例和測試執(zhí)行時間的增加,會越來越明顯。因此需要考慮消除這里的重復問題,減少build的時間,并節(jié)約jenkins的資源。
              首先考慮兩次scm update的問題,這個問題的來源在于有兩個jenkins的job,因此考慮將***_job廢棄,直接在原有job上執(zhí)行sonar。將maven命令修改為以"clear deploy sonar:sonar"。

              這次理所當然的只update 一次scm,但是test 還是執(zhí)行了兩次。在install階段執(zhí)行第一次,在sonar:sonar階段執(zhí)行第二次。
              試著在jenkins中安裝sonar的plugin,然后將maven命令修改為原來的"clear deploy",在Post-build Actions勾選sonar,通過jenkins的sonar插件來執(zhí)行sonar。很遺憾,還是兩次test。
              想了想問題還是在sonar這里,為什么不直接使用已經(jīng)執(zhí)行的test的結(jié)果?
              google了一下,發(fā)現(xiàn)sonar自己的文檔中也提到了這個兩次執(zhí)行test的問題,但是,居然沒有給出解決的方法。
          http://docs.codehaus.org/display/SONAR/Analyse+with+Maven
              不過提到可以通過設(shè)置-Dmaven.test.failure.ignore=true 來要求sonar即使在test執(zhí)行失敗的情況下也要執(zhí)行代碼分析。
              隨后google到sonar的jira記錄,有一個bug解決這個問題
          http://jira.codehaus.org/browse/SONAR-415
              jiar記錄中明確提到,“for performance reasons. It avoids executing twice unit tests.”,呵呵,正和我意啊。
              解決的方法,就是通過設(shè)置 sonar.dynamicAnalysis = reuseReports,使得sonar放棄運行 test 而直接復用已有的report,從而避免了二次執(zhí)行test。
              總結(jié):最終的mvn 命令行
          clean deploy sonar:sonar -Dsonar.dynamicAnalysis=reuseReports -Dmaven.test.failure.ignore=true

          posted on 2012-02-14 14:53 sky ao 閱讀(5686) 評論(5)  編輯  收藏 所屬分類: project building

          評論

          # re: 解決jenkins執(zhí)行sonar時重復執(zhí)行兩次test的問題 2012-02-14 15:12 sky ao

          剛剛很郁悶的發(fā)現(xiàn),按照上面的命令sonar雖然可以跑,但是出來的結(jié)果里面,少了很重要的一個內(nèi)容:

          Code coverage 那里沒有內(nèi)容!

          難道非得跑兩次test才行?  回復  更多評論   

          # re: 解決jenkins執(zhí)行sonar時重復執(zhí)行兩次test的問題 2012-06-04 17:45 god

          跑2次有什么問題嗎  回復  更多評論   

          # re: 解決jenkins執(zhí)行sonar時重復執(zhí)行兩次test的問題 2012-06-09 20:41 sky ao

          @god

          沒有特別的壞處,只是測試時間就要*2了,有點浪費時間和資源。  回復  更多評論   

          # re: 解決jenkins執(zhí)行sonar時重復執(zhí)行兩次test的問題 2012-06-16 22:58 bigfei

          這個可以通過jenkins的一個插件解決,google jenkins sonar test plugins.  回復  更多評論   

          # re: 解決jenkins執(zhí)行sonar時重復執(zhí)行兩次test的問題[未登錄] 2012-09-14 16:37 hello

          為什么不第一次構(gòu)建的時候不執(zhí)行呢
          clean deploy -Dmaven.test.skip=true
          sonar:sonar  回復  更多評論   

          主站蜘蛛池模板: 宁陕县| 阆中市| 武邑县| 清丰县| 临沭县| 博兴县| 宜宾县| 黎川县| 桑植县| 阳泉市| 湛江市| 嘉祥县| 孝感市| 乐至县| 安康市| 清新县| 信阳市| 鲁山县| 南平市| 南宫市| 瑞丽市| 资溪县| 静宁县| 凌云县| 绍兴市| 深水埗区| 华坪县| 额尔古纳市| 灵宝市| 甘谷县| 庆元县| 陇西县| 广昌县| 枝江市| 岳普湖县| 鄂托克前旗| 龙口市| 松滋市| 驻马店市| 龙州县| 自治县|