跨地域開發的需求其實由來已久,在IT/互聯網發展的早期就已存在,只不過限于當時網絡環境的因素,無法在線上有效的完成協同工作,所以沒法實際開展。而隨著近十年網絡的快速發展,跨地域協同開發線變得可能而且越來越普遍,尤其是在大公司內部。
同時隨著行業的發展,敏捷開發模式的不斷推廣,軟件交付和更新的速度越來越快,特別是移動互聯網產品,幾乎每天都有更新。所以在這種背景下,如何保證在跨地域協同開發場景下產品的快速迭代和交付成為各IT/互聯網公司不斷探索的內容。
跨地域協同開發的痛點
華為公司目前在全球各地共有16個研究所,跨地域協同開發場景非常普遍。就拿軟件開發云團隊為例,目前團隊成員分布在北京、大連、深圳和成都四個城市,每天的開發都出處于跨地域協同開發的狀態。
相信大家可以列舉出不少跨地域協同開發場景下的用戶痛點,這里基于個人經驗和理解,列舉了四個跨地域協同開發的核心痛點:
·需求溝通:需求的溝通是矩陣交叉式的,再加上跨地域,難度系數倍增;
·版本控制:包括代碼版本和代碼質量控制;
·項目管理:包括項目階段和任務的劃分,需求和Bug的管理;
·聯調:主要是Bug的聯調
華為的實踐與解決方案
那么如何才能有效的解決上述的用戶痛點呢?這里給大家分享一些華為的內部經驗,這些經驗也是華為不斷吸收先進研發理念,并經過自身實踐,改進和優化而來。
首先我們是找到解決問題的方法,其中主要結合了敏捷開發模式的理念,列舉如下圖所示:
有了方法其次是找到合適的工具,所謂“工欲善其事必先利其器”,有了合適的工具再加上正確的方法將會達到事半功倍的效果,基于上述介紹的方法這里列舉三個主要的工具如下圖所示:
上述工具中我將重點介紹基于Git的版本控制工具,那么為什么選擇Git,而不是SVN或者其他工具。應該大家對Git都很熟悉,百科里是這么描述Git的:Git是一款免費、開源的分布式版本控制系統,用于敏捷高效地處理任何或大或小的項目。我想說得是Git就是為跨地域協同開發場景而生,它是解決跨地域協同開發問題的一個利器。為什么這么說,大家可以看看PPT當中我列舉的Git的一些主要特性,這就是我們選擇Git的原因。
下面我將通過分享兩個版本控制工具的實際使用示例來闡述我們是如何解決跨地域協同開發的問題。
示例一:
當項目立項后,我們首先會在服務器端創建原始的代碼倉庫,然后各地域開發者在本地執行git clone指令先將服務器端代碼倉庫克隆至本地,再根據對應的開發需求執行git checkout指令創建自己的開發分支,開發過程中各地域開發者互不影響。
開發完成后執行git add和git commit指令將代碼提交至本地,提交測試并通過后再執行git push指令向項目負責人提交推送代碼至服務器端代碼的合并請求,如果通過則代碼將推送至服務器端,否則打回,開發者需做相應修改后再提交合并請求。具體的流程示意圖如下圖所示:
通過該示例,我們可以看到版本控制工具實現了離線開發、代碼審核特性,解決了跨地域協同開發中代碼質量和編碼協同的問題。此外通過上述方式,代碼安全性也得到提升,比如服務器端出現異常導致代碼丟失,這時我們可以通過各地域開發者本地的代碼庫恢復服務器端代碼庫。
示例二:
項目代碼倉庫創建時,默認為Master主干分支,其特征是穩定且主要用于發布產品版本。而針對開發過程,我們會創建一個develop的開發分支,然后各地域開發團隊根據各自開發需求創建不同的開發分支。
比如北京的團隊開發FeatureA功能,將從Develop分支拉取一個FeatureA的開發分支;深圳的團隊開發FeatureB功能,則會從Develop分支拉取一個FeatureB的開發分支。兩個開發分支互不影響。每個開發分支開發完成后合并至Develop分支執行測試,測試通過后再合并至master主干。
完成某個里程碑后我們在Master主干上打上V1.0.1標簽,并作為發布版本發布。標簽為只讀權限,防止開發者誤將代碼提交至發布版本。
版本發布上線后,如果發現Bug,開發團隊需要緊急修復,首先從V1.0.1標簽處拉取一個V1.0.1SP1的補丁分支,然后在該分支上修復代碼,測試通過后再合入Master分支,并打上V1.0.1SP1的標簽。同時,為了保證補丁版本修改的代碼及時合入到開發環境,開發團隊需要將V1.0.1SP1分支合入到Develop分支。
具體操作示意圖如下圖所示:
此外我們可以通過如下的倉庫網絡圖有效的查看各分支間的關系以及提交歷史,便于版本控制和問題追溯。
通過這個示例,我們可以看到版本控制工具可以支持靈活的分支策略和標記版本里程碑的特性,解決了跨地域協同開發中特別重要的問題就是版本控制。
除上述兩個示例外,跨地域協同開發過程中不可避免的會遇到代碼安全性的問題,那么如何有效保障代碼倉庫的安全性,這里主要介紹如下兩點經驗:
·權管理限:只有項目負責人才可以創建和刪除代碼倉庫,開發者推送代碼至服務器端代碼倉庫,需要項目負責人做代碼評審
·安全白名單訪問限制:配置IP白名單,只有在白名單列表的IP地址用戶才可以正常訪問倉庫
結合上述方法和工具,華為將自身的經驗抽象成服務,依托Git提供了支撐跨地域開發的版本協同服務,并與項目管理服務拉通,服務于內外部研發團隊。該服務不但有效的嵌入到DevOps的全流程服務(項目管理、配置管理、代碼檢查、編譯構建、測試、部署、發布和持續交付流水線)中,構建了DevOps一站式解決方案,也能作為獨立服務(DevCloud配置管理服務)提供給企業研發團隊使用。
總結
總的來看,使用工具可以有效提升跨地域協同開發場景的效率與質量,但工具一般需要購買或者企業自己研發,成本都較高。而借助華為軟件開發云,開發者和企業將不需要花費成本購買工具或花費人力成本研發工具,只需專注于產品的研發,實現持續集成、持續交付和快速迭代的目標。
華為軟件開發云(DevCloud)是集華為研發實踐、前沿研發理念、先進研發工具為一體的研發云平臺,為開發者提供研發工具云服務,讓軟件開發簡單高效。