2009-11-21 25 views
6

哈德森的git的插件,效果很好。但是,構建腳本必須更新存儲庫中文件的版本號,提交併推送回存儲庫。Hudson無限循環輪詢Git倉庫中的更改?

當Hudson輪詢旁邊檢查更改時,它會進入一個無限循環,因爲它認爲提交作爲「更改」再次構建,提交更改,所以它再次構建,然後它提交另一個更改等。 ..你明白了。

我停止了,跑在每個存儲庫中的「混帳日誌」,並比較了最近一次提交的IDS是完全一樣的使用Git LS-樹頭

此外,哈德森運行此命令檢查更改:

git的取指+裁判/頭/ :裁判/遙控器/產地/ git的LS-樹頭

由於哈德森自己推離其工作區,庫提交,顯然,LS-樹結果的比賽,怎麼能這個命令確定有變化?

看來,它必須是ls-結果樹存儲做的構建和比較這裏面會不會有最新的承諾之前。啊。我可以嘗試關閉提交來測試該理論。

無論如何,我並沒有在哈德森的git插件中解決任何問題,我可以做些什麼來確保在我的構建結束時,回購是完全相同的,哈德森會這樣認爲。

如何解決這個問題?有任何想法嗎?

韋恩

+0

果然。當提交被註釋掉以便腳本只推送到一些存儲庫時,它可以正常工作。也就是說,哈德森認識到發生了零變化,並等待沒有循環的變化。 那麼如何停止無限循環。看起來哈德森的git插件在構建的初始獲取之後保存了回購狀態。但似乎它應該在成功構建之後再次保存回購狀態,以防構建提交 - 或者至少將其作爲選項提供。 任何機構有一個更容易,更快的想法來解決這個問題? – Wayne 2009-11-21 05:52:22

+0

哦,我在github上發現了git-hudson-plugin的一個分支,其他人似乎已經增加了對這種情況的處理。我正在下載並構建,並會嘗試。 再次如果有人有更好的解決方案,請指教。如果解決了問題,我會回覆。 – Wayne 2009-11-21 07:44:09

回答

3

答案是!...

Git的哈德森插件已經被人添加此功能效果很好分叉。不過,我不得不拉下來源並解決一些小問題。

現在它精美的作品。構建提交,並且Git插件無需循環而回退到存儲庫,並認爲它已經再次更改。

太棒了!

如果其他人需要此外觀Github上Hudson-GIT-Plugin的tickzoom分支。com,但檢查是否已經集成到主項目中。提交者說他有興趣並計劃合併叉子。

Wayne

+0

哦。這很酷!事實證明,哈德森Git插件已經處理了這種情況。它在文檔中對它進行了描述,並且幾天前我的頭腦已經過時。這個想法是隻承諾「功能」分支。然後,構建服務器首先將功能分支合併到集成分支,然後執行工作。這樣,從不需要自動服務器進行非快速轉發合併,並且按照正確的順序在集成分支中進行提交。真棒。你必須愛上Git的力量。 – Wayne 2009-11-22 08:06:55

5

構建系統不應該有你的版本控制系統的任何寫操作的交互。它肯定不應該這些更改自動。

您的編譯系統可能會請求 git(例如通過git describe)當前版本是什麼。其他任何事情都是多餘的和容易出錯的。

你可以考慮的另一件事情是不是更改投票。這似乎是一個愚蠢的經營方式。 (誠​​然,我是一個沉重的buildbot用戶很習慣擁有一切可以在事件觸發。)

多數民衆贊成輪詢的混帳回購知道什麼時候它的變化。它應該告訴CI系統立即開始構建。你儘早得到你的構建,因爲它們全部被觸發,你沒有計算機坐在那裏沒有很多的工作,沒有很好的理由。

+0

不幸的是,寫入必須發生,因爲構建必須使用0.5.6.135之類的版本號來標記修訂版本,並且還要使用數字更新源文件,以便編譯的二進制文件具有修訂版本。這允許將錯誤追蹤回正確的源代碼。我們以前使用SVN,並且該插件在查詢更改時可以選擇「忽略」某些文件。所以我們忽略了我們的版本文件。當然,Git是不同的。如果你知道一些其他方法來實現這一點,請讓我知道。 – Wayne 2009-11-21 06:53:36

+0

我喜歡你不想輪詢實際變化的想法。這個障礙也避免了從自動構建中推出的無限循環。所以這個方法也必須有辦法比較一下。這很複雜。因此,投票和比較似乎更直接。每改變1分鐘輪詢一次,絕對不會讓計算機擔心做任何事情。 – Wayne 2009-11-21 07:23:08

+0

僅供參考,我現在意識到爲什麼你說構建不應該寫入存儲庫。我已經完成了所有的設置和工作,但CI編譯器在編譯結束時編寫並創建非fastword提交,而編碼器在編譯期間繼續編碼和提交。複雜但必要的要求。我會發布另一個問題來解決這個問題。 – Wayne 2009-11-22 02:25:04