1. 程式人生 > >技術團隊程式碼管理和部署

技術團隊程式碼管理和部署

瓦力(walle-web.io)是個支援多專案、多環境一鍵部署上線,git程式碼釋出,svn程式碼釋出,一鍵快速回滾的開原始碼釋出管理系統,歡迎star、fork試用。

主流公司使用svn和git作為程式碼版本管理,當然也不排除直接copy或者ftp。公司經歷了的svn到git的變遷,也深刻體會到不同的版本管理服務,使得技術團隊的協作方式變得更為流暢。

簡單介紹下背景,有一個專案V5,從版本V1一直演變到現在V5,可見歷史之久,想從svn切換到git,其中的程式碼管理和上線部署遷移,都會是經歷很長一段時間的不穩定,尤其是一些開發同學對新的版本管理和部署理解不透徹,很容易引發事故。

在svn的主幹開發流程

  • 開發同學更新主幹程式碼,提交程式碼

  • 部署測試環境

  • 檢查每一個要上線的檔案版本,是否夾帶其它同學的提交,如果有,先回滾再提交,或者是帶版本號上線,如:

common/request/Base.php
common/config/db.php -r 182993909

現在龐大的V5程式碼庫仍然是全公司同學往master裡更新程式碼,開發團隊越來越大,這種原始的原始的開發方式,讓所有同學都在一個master分支上協作的成本越來越大。

成本大在哪些地方?

團隊協作首先是要讓成員更方便獲得彼此的更新,這樣才能更一起完成各個模組,最後聯調測試。成員就會把程式碼加入版本管理,而專案是有時間跨度的,如果時間短的專案和大專案的程式碼混合了,小專案要上線需要剝離大專案,剝離是否出錯先不說,這個時候已經影響到另外一個專案了。如果遇到線上bug,需要緊急修復,需要從線上版本檢出,最後和其它成員合併,這工作量都是附加的。

另外,在部署的時候繁重的版本檢查,會嚴重耽誤上線時間,改程式碼和驗收花了5分鐘,上線檢查和處理夾帶其它提交也花了5分鐘。這時間成本在線上事故面前,那就直接影響著你的KPI了。

切換到git分支開發

這,不是我們想要的開發流程。遷移到git的分支開發是遲早的事情,它首先帶來的好處就是團隊不同專案的開發是相互隔離的,測試迴歸可以靈活地選擇feature分支驗收,通過再合併到主幹。

branch和tag

Branch: master 和 development。其中 master 對應目前的釋出分支,在這個分支只能增加從 master cherrypick 過來的 commit。development 是當前開發的分支,所有的 pull request 都應該發到這個分支。有些團隊會以master作為開發主幹,另外推送一個online分支作為釋出分支,名字不同而已。

Tag: 對應每個釋出版本的 tag。 tag 遵照 tag_[milestone號]_日期 的命名,如 tag_m6_2015-08-12,如果有 bugfix,則在後面增加小寫字母,如 tag_m6_2015-08-12後是 tag_m6_2015-08-12a,然後是 tag_m6_2015-08-12b。

正常開發流程

  1. 從master切feature分支開發

  2. 自測通過之後,提交 pull request 到 development(如果是大專案milestone的話,可以先pull request到milestone分支),並通知QA部署feature分支迴歸

  3. CodeReview標Ok,QA驗收通過後進行merge到development,如果CodeReview或者QA發現有問題,在feature分支修正再部署到測試環境,直到沒有問題

  4. merge 驗收通過的 feature-fix 到 development

  5. 部署development分支到測試環境

  6. 測試驗收通過,merge development分支到master,打tag

  7. 發起模擬環境上線,模擬環境驗收

  8. 驗收通過,發起生產環境上線

  9. leader稽核上線任務,發起同學進行部署,生產環境驗收

hotfix流程

  1. 從master切hotfix分支開發

  2. merge 確保所有要釋出的 pull request 到 master

  3. 後面與正常開發流程一致了

  4. merge master分支到development

大專案與hotfix開發和上線流程圖

wKiom1Ys8YigbsM_AASr8E1qMOk345.jpg

如果不是開發週期有兩三個星期的專案,迭代速度快的,一天要上線好幾個小功能的,可以在開發完feature分支,跳過milestone分支直接merge到development分支,讓QA驗收打tag。另外,並不是每個 bug 都有專門釋出 bugfix 版的必要,對於不緊急的 bug,可以在 master 裡 fix 後隨下一個版本釋出。

目前試用免費開源瓦力上線系統https://github.com/meolu/walle-web,開源瓦力官網:http://walle-web.io/,分別部署測試、模擬、生產環境大大節約了指令碼上線的成本,開發、測試同學自行可發起部署。同時支援git、svn版本管理。其功能特點如下:

  • 使用者分身份註冊、登入

  • 開發者發起上線任務申請

  • 管理者稽核上線任務

  • 支援多專案部署

  • 快速回滾

  • 部署前準備任務(前置檢查)

  • 程式碼檢出後處理任務(如vendor,環境配置)

  • 同步到各目標機器後收尾任務(如重啟)

  • 執行sql構建(不要擔心忘記測試環境sql同步)

  • 線上批量檔案指紋檢查

其宿主機、目標機群、操作使用者關係如下圖:


部署釋出每次都會有版本記錄保留,事故一旦發生,回滾瞬間完成。其上線流程安全可靠,同時支援git、svn,支援多工輔助,即可對一些前置、後置操作自定義。如vendor更新,java mvn編譯。我們看下其部署的原理。


目前花滿樹的主頁部落格瓦爾登、瓦力自己已交由瓦力來部署上線,其它超過300家公司使用,歡迎star、fork試用,有任何問題請反饋:)