<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sky's blog

    我和我追逐的夢

    常用鏈接

    統(tǒng)計

    其他鏈接

    友情鏈接

    最新評論

    hudson中subversion HEAD check out 的問題及疑惑

    近期發(fā)現(xiàn)一個問題,hudson執(zhí)行任務(wù)時,經(jīng)常不能獲取到最新的代碼,從而導(dǎo)致出現(xiàn)各種問題。 

    日常開發(fā)中的典型例子:發(fā)現(xiàn)一個bug,修改代碼,本地測試通過,提交代碼到subversion,手工激活hudson構(gòu)建,原本期望hudson獲取到剛剛提交的代碼并測試/打包/發(fā)布。結(jié)果事與愿違,測試的結(jié)果發(fā)現(xiàn)剛剛做出的修改似乎沒有生效。正費解之時,再執(zhí)行一次hudson構(gòu)建,又成功了... 

    經(jīng)歷過幾次上述蹊蹺遭遇之后,發(fā)現(xiàn)這個問題不是偶然。之后檢查hudson的日志,發(fā)現(xiàn)問題的發(fā)現(xiàn)在最開始update / check out subversion代碼時,明明已經(jīng)提交的代碼,hudson做update / check out時,居然沒有update / check out下來!顯示的subversion版本號也和subversion上實際的最新版本不一致,hudson總是要小一些,換言之,hudson update / check out的代碼要比當(dāng)前最新代碼老一些。 

    google一番,發(fā)現(xiàn)這個問題之前就有人遭遇過,hudson上甚至已經(jīng)有了好幾個關(guān)于這個問題的bug,比如 http://issues.hudson-ci.org/browse/HUDSON-1241 "force using HEAD SVN version for build"。問題的根源在于hudson 獲取subversion代碼的方式,hudson是通過時間戳的方式來獲取代碼,而不是我們一般認(rèn)為的"最新代碼"即"HEAD"。這種方式通常沒有問題,因為獲取當(dāng)前時間戳,然后要求update / checkout這個時間戳前的代碼,理論上也是可以拿到最新代碼的。 

    但是,如果hudson所在的服務(wù)器和subversion服務(wù)器時間不一致,這個機制就會出現(xiàn)問題: 

    我們假設(shè)subversion服務(wù)器的時間是準(zhǔn)確的,再假設(shè)當(dāng)時時間是15:10分,開發(fā)人員A提交代碼,subversion上當(dāng)前這個最新提交的代碼時間戳為15:10:00。然后開發(fā)人員A手工激活hudson進行構(gòu)建。hudson在15:10:20時開始check out代碼。如果hudson時間無誤,則hudson會發(fā)出請求說要求獲取時間戳在15:10:20之前的代碼,這樣這個實際提交時間為15:10:00的新代碼就可以如期的被check out。但是如果hudson的時鐘有誤,由于某些原因?qū)е聲r鐘偏慢2分鐘,即在hudson上,"當(dāng)前時間"為"15:08:20",則hudson獲取代碼的請求為:獲取時間戳為15:08:20之前的代碼,此時時間戳為15:10:00的新代碼就無法checkout。 

    幾分鐘之后,疑惑的開發(fā)人員A再次激活hudson再次構(gòu)建,假設(shè)此時時間時間是15:15:00,hudson慢兩分鐘為15:13:00。此時hudson發(fā)出請求: 獲取時間戳為15:13:00之前的代碼, 因此實際提交時間為15:10:00的新代碼可以正常checkout,問題又在不知不覺被回避了。 

    總結(jié)說,hudson 獲取代碼的機制不是我們直覺中的獲取最新代碼(即subversion中HEAD checkout),而是基于時間戳。由于這個方式通常如HEAD般工作,因此我們總是容易誤解為是獲取最新代碼。當(dāng)hudson的時鐘晚于subversion時,悲劇就出現(xiàn)了。 

    對這個問題,有幾點疑惑: 

    1. 不明白為什么hudson不采用最直接最簡單最容易被人理解最不容易出誤解的HEAD checkout,而要基于時間戳 

    2. 這個問題很早就發(fā)生了,上面提到的bug 08年就被人提出, "Created: 31/Jan/08 05:37 AM   Updated: 01/Jul/10 11:06 AM",三年了類似的bug被多次提出,但是就是始終沒有修復(fù)。 

    修復(fù)的方式很簡單,就改一個類的一行代碼 

    in Class: hudson.scm.SubversionSCM 

    line 377: 
    final SVNRevision revision = SVNRevision.create(timestamp); 
    replace to: 
    final SVNRevision revision = SVNRevision.HEAD; 

    hudson拒絕修復(fù)的理由是什么?

    posted on 2010-09-29 23:02 sky ao 閱讀(2682) 評論(0)  編輯  收藏 所屬分類: project manager

    主站蜘蛛池模板: 亚洲精品宾馆在线精品酒店| 手机看黄av免费网址| WWW国产亚洲精品久久麻豆| 久久亚洲私人国产精品vA| 国产成人精品久久亚洲高清不卡 | 成人男女网18免费视频| 91成人免费观看| 免费无码H肉动漫在线观看麻豆| 羞羞的视频在线免费观看| 亚洲色大情网站www| 亚洲成a人片在线观| 亚洲国产精久久久久久久| 亚洲综合无码AV一区二区| vvvv99日韩精品亚洲| 国产精品国产午夜免费福利看| 国内免费高清在线观看| 91成年人免费视频| 84pao国产成视频免费播放| 永久在线观看免费视频| a级毛片毛片免费观看久潮喷| eeuss影院www天堂免费| caoporn成人免费公开| 一级毛片一级毛片免费毛片| 免费无遮挡无码视频在线观看| 最新亚洲人成无码网www电影| 亚洲国产AV一区二区三区四区| 亚洲精品美女久久7777777| 亚洲欧洲精品成人久久曰| 日韩亚洲国产综合高清| 伊人久久亚洲综合影院首页| 亚洲综合av一区二区三区| 中文无码亚洲精品字幕| 亚洲另类无码专区首页| 亚洲中文字幕无码中文字| 亚洲午夜成人精品无码色欲| 亚洲伊人精品综合在合线| 亚洲伦理中文字幕| 亚洲妇女无套内射精| 免费播放美女一级毛片| yellow视频免费看| 91成人免费福利网站在线|