2009-07-10 137 views
4

在我工作的軟件開發環境中,我們有一組開發人員都在同一個(Java)代碼庫(當前使用SVN)工作。 我注意到,人們希望經常提交他們沒有「破壞構建」而構建的內容。所以出於這個原因,我正在尋找像Git和Mercurial這樣的工具,使分支和特別合併變得更加容易。持續集成工作流程理念

我看到的一件事是,如果開發人員提交'錯誤代碼',那麼代碼就會被打破。作爲一個避免這種想法的想法,我想要一種具有「中間單一特徵」存儲庫的方法,該存儲庫僅僅是當前的「主」,只有該單一新功能的一個變更集。然後,在成爲主要代碼庫之前,可以自動測試這種「中間單一特徵」存儲庫(代碼質量,單元測試,手動代碼檢查等)。

所以我想到的工作流程看起來像這樣:

  1. 開發人員創建一個新功能並每天在本地提交。
  2. 經過一段時間後,開發人員完成並提交整個變更集以集成到「主」存儲庫中。
  3. 持續集成系統採用當前的「主」,應用更改集並檢查代碼(合併衝突,PMD,FindBugs,...),運行單元測試,檢查編碼風格等。
  4. 如果CI系統決定「壞代碼」,開發者被告知原因,開發者必須解決上述問題。在這種情況下,主存儲庫不變。
  5. 如果CI系統決定「足夠好」,那麼代碼將到達「首席開發人員」或「代碼審查人員」,他們會檢查所選解決方案並批准或拒絕該解決方案。
  6. 然後將批准的變更集包含到主存儲庫中,並供所有開發人員進行重定位/合併。

我對這種工作流程的一些問題:

  • 你的事情,這將在實踐中很好地工作(即這是一個好主意或一個真正的新空房禁地之一)?
  • 以前有沒有人和你一起工作過?親和的是什麼?
  • 是否有一個'準備好運行'的腳本/程序/工具/ ...,可以在最短的時間內啓動這樣一個工作流程(或這個想法的變體)?

謝謝。


背景說明:

我已經在那裏建立內部類似的工作流程中的公司約13年前曾作爲開發商,他們有兩個每晚構建:

  1. 「生產'版本:主代碼庫
  2. '高級版本:主代碼庫包含所有新提交版本的所有更改文件。

因爲這是所有SCCS(鎖定編輯 - 解鎖模式)的基礎上沒有辦法'經常',你有代碼更改和所有其他類型的討厭影響的死鎖。 我期待的主要是關於當時使用當今更好的工具的東西。

回答

2

的TeamCity有一個預測試提交功能。

http://www.jetbrains.com/teamcity/delayed_commit.html

+0

我讀的頁面,看來,如果「提交」的變化,則系統會立即開始運行。如果你想「經常提交」,但是隻想在你認爲完成時就開始工作,這是如何工作的。如果你使用測試驅動開發,你首先進行(和提交)故意「破壞構建」的測試,以顯示仍然需要添加的功能。 – 2009-07-10 11:38:03

2

在我目前工作的公司,我們考慮過使用這種方法。最後我們選擇了一些更簡單的方法。我們讓自動化版本在成功構建後設置標籤,並且我們有一個工具用於同步到該標籤。所以當有人破壞構建時,其他人仍然可以從存儲庫中獲得工作版本。同步的工具還可確保如果您剛剛提交了某些內容,您的更改將不會被屬於該標籤的修訂所取代。對我們來說,這是完美的,但它可能不適合你的情況。

問候,

Sebastiaan