软件研发软件基础设施的建设
前言
決定團隊效率的不僅僅是成員的技術水平,團隊的組織形式,還有一個關鍵因素就是軟件研發的基礎設施因素,團隊再牛技術再好沒有合適的基礎設施往往都是事倍功半。本文將介紹經過兩年的積累我們搭建的一套零成本的軟件研發基礎設施,特別適合于無法直接連接互聯網的團隊。畢竟互聯網上已經有相當成熟的軟件研發基礎設施,而且對于小團隊來說還基本是免費的,具體的請出門百度。
順便提一句由于技術棧不一樣可能需要的基礎設施略有差別,請根據自身情況自行裁剪。
推薦基礎設施
我們目前已經構建了如下圖所示的研發基礎設施,基本滿足我們團隊的需求,此外我們也建立了資料共享的wiki,docker的鏡像倉庫以及適應特殊網絡的持續部署系統。
版本管理系統
說到基礎設施,第一個要介紹的就是版本管理系統。若一個團隊沒有版本管理系統,那只能說明這個團隊要么是一個人要么是屬于石器時代。就算只有一個人,其實也需要版本管理系統來支持對比,回滾,分支。
目前最流行的版本管理系統非Git莫屬,強烈推薦使用Git來作為新團隊的版本管理系統。但由于歷史原因我們采用的是SVN,對于身處于局域網中的我們影響到還不是很大。
這里特別提一下,使用SVN的話也能有一些好處那就是能盡量保證主線的一致性,因為其支線和合并功能并不是特別好使。
我們使用的VisualSVN作為服務端,至于客戶端就看個人喜好了,可以使用TortoiseSVN或IDE內嵌的,問題都大。
Bug管理系統
Bug管理系統也是支持研發的一大利器,哪個團隊能開發出沒有Bug的產品,與其說是沒有不如說是不愿意看到,同時Bug管理系統記錄缺陷及時進行修復。
這里需要說明的是能修復的Bug就直接修復,不能修復的在錄入,不要讓Bug管理系統成為Bug的最終歸屬地。
我們搭建的是BugFree,簡單實用。
持續集成系統
持續集成系統是現代軟件研發團隊的標志,高效的團隊離不開持續集成系統的支持。它能夠自動構建,自動測試,自動部署產品,不斷地確認產品的質量,及時發現問題和缺陷。
我們采用的Jenkins作為我們的持續集成系統,免費開源功能強大,插件眾多。
持續集成系統需要版本管理系統的支持,還可以與后面的質量自動檢查系統配合使用。
需要注意的是Jenkins構建過程是十分消耗內存和CPU的應當為其找到合適的硬件,同時注意配置系統來及時清理構建產物,我們最開始的jenkins莫名的掛掉,后來發現可用空間為0,好幾百G的構建文件。。。
同時Jenkins支持集群,要是團隊比較大,產品龐大可以考慮使用集群的方式來搭建持續集成系統。
代碼自動質量評價系統
產品質量的另一大利器是代碼自動質量評價系統,這個系統可以自動評價項目中的源碼的質量情況,找到可能的缺陷和問題,以及不符合編碼規范的地方。
我們最開始使用功能的checkStyle等IDE插件來實現這個工作,后來發現了sonar系統,效果杠杠的項目的編碼質量上了一個大臺階,技術債務大幅下降。
需要注意的是清理技術要適度,過分的追求0債務往往是不合適的。
依賴倉庫
我們采用的maven進行項目構建,同時我們又是身處局域網中,依賴下載我們的一個大問題,經過調研確定可以搭建nexus作為局域網倉庫。
需要注意的是,局域網內開發,在開始時會經常遇到局域網倉庫沒有依賴的現象,我們的做法是在外網通過項目的pom下載依賴后,再將外網的本地倉庫同步到局域倉庫。
代碼評審系統
為了進一步提高產品的質量,我們每天進行代碼審查,開始我們通過IDE來進行代碼review有時候發現不是很方便,后來我們搭建了Upsources來輔助進行代碼審查,效果還不錯。
一個意外收獲是由于有統計信息的存在,大家提交代碼的頻率高了很多,同時SVN的嚴重沖突現象基本消失了。
需要注意的是Upsources是商業產品,但小于10人的團隊可以免費使用,怎么用大家都懂了吧。。。。
其他基礎設施
除了上文的這些系統我們還搭建了doukuwiki來實現資料的共享、docker的鏡像倉庫來進行鏡像的管理、finesse作為我們的驗收測試系統。
總結
需要注意的是,隨著技術的發展,基礎設施始終處于一個動態的演化過程,基礎設施是為了提高團隊的工作效率,產品的質量。不能忽視團隊和項目的實際情況,過于追求新奇的基礎設施,對于產品或團隊造成負面影響,這就是舍本逐末。
對團隊來說最重要的基礎設施就是版本管理系統+持續集成系統+Bug管理系統,有了這些系統可以更高效的支撐團隊的研發。
磨刀不誤砍柴工,愿大家都有一個好的平臺。
總結
以上是生活随笔為你收集整理的软件研发软件基础设施的建设的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx与TCP协议的关系
- 下一篇: 集成电路发展历史