2016-09-26 162 views
0

這是關於與應用程序構建相關的最佳實踐。我們正在遵循git flow開發原則。我們用竹子來建造,但這並不重要。我的問題是,是否有更好的計劃構建或自動構建或手動構建?我個人認爲自動化或手動構建是要走的路,這就是爲什麼。構建自動化過程

自動構建將輪詢特定的分支(很可能是開發分支),當它檢測到更改時,它將啓動構建。這非常棒,因爲當有新代碼構建時,您總是創建一個構建版本。不好的一面是,如果你有一個5人的團隊,每個人都將他們的功能分支合併爲1分鐘後開發,那麼你將有5個不同的版本。

這導致我爲什麼相信手動構建是最好的。一旦你有每個人的變化,你可以啓動一個構建。這將保持較小的構建數量。

SO對選項有什麼看法?哪一個是高效CI/CD團隊的標準行業慣例?

回答

1

我認爲你如何管理構建的任何意見取決於你在你的過程中的價值,這是不明確的你的問題。

另外;大多數構建系統不需要每次提交都有獨特的構建。如果您在輪詢間隔內有多次提交開發,則應該能夠將它們全部測試/部署爲一個構建。這可能對你有好處或壞處。

持續集成

持續集成應該給你與你的項目處於釋放狀態(或者至少通過其自己的測試,希望這是同樣的事情)保證一個更加順利和迅速發展的過程。我發現手動構建通常無法實現相同的質量水平。對於「知道」在下一個手動構建之前將其修復的問題進行修改變得非常容易,因爲在下一個手動構建開始滑動越來越遠或者構建失敗時,突然不清楚引發失敗的幾個變化中的哪一個會發生變化。對於持續集成,我不僅希望開發分支的自動構建,還希望每個功能分支的自動構建都顯示他們在將測試合併到開發之前通過測試。

在許多環境中,與開發團隊的時間成本相比,CI構建的成本可以忽略不計。例如,我目前正在尋找一個項目,平均約5個活躍的提交者,並且在過去4年左右每天只有12個構建。保持測試的快速和可靠並不容易,但應該運行大量的構建(同時在功能分支的情況下)。

有些環境下測試構建的過程不便宜或快速,例如您需要運行需要花費數小時的硬件測試或性能測試。在這些情況下,您需要一種不同的方法,但您實際上也可能無法實踐持續集成,而您的開發/分支策略應該反映這一點。

持續交付

連續輸送進了一步,並從發展縮短了循環時間的變化,通過部署所有這些鬆脫建立您的用戶。如果在釋放(或回滾)這些構建過程中有手動步驟,那麼我認爲您不應該將您的過程稱爲「持續交付」。

你可以有一個非常好的自動化部署過程,而不是連續的。持續交付對某些產品可能非常有價值,但也可能是破壞性的,對其他產品不適合。例如,我們目前不斷部署到面向消費者的Web應用程序。我們還維護後端操作工具,我們對何時發佈(或至少何時啓用新功能)更爲保守,因爲對這些工具的更改可能會引入新的工作流程,而我們不希望在沒有警告的情況下出現在某人的輪班中間。

TL;博士

自動化的一切,不要試圖讓小構建的數量放慢你的團隊。