成熟的Web開發團隊開發、測試、上線的環境和流程是怎樣的?
團隊現有的開發環境無法滿足開發人員快速開發、調試、聯調的需求,測試環境無法較好地模擬線上環境,依賴於人工操作的上線難以保證正確性且不易維護……因此目前需要設計一套合理的開發流程來滿足前端、後端的開發需求。
想借鑒一下目前成熟團隊使用的環境和流程是怎樣的,如何解決這些問題?p.s. 之前找到一份《一淘前端工作環境簡介》: http://www.slideshare.net/neekey/2-12059408
1年前的問題,阿大的ppt還是12年的。。。現在我幫你回答一下吧。
先簡單說下你貼的一淘那個工作環境,由於之前我也在taobao干過,知道那個daily的作用,簡單說下,其實就是一套模擬的線上測試環境,包括數據,是上線前測試的最後一關,當然上daily還是需要在測試環境全測好才上的,那是最後一道關卡。
環境和流程,你貼的ppt是一種方法,細節涉及了很多,比如git和svn的操作,高級特性的使用之類。期間還介紹了一些打包的流程,目錄管理的規範,命名規則之類,個人感覺不存在通用性。至少在你現在的項目中沒有什麼實際的借鑒價值。
現在來回答你的問題。
總結一下:
1,你需要一個可以模擬線上的開發環境。
2,你需要一個可以模擬線上的測試環境。3,你需要一個可連調的測試環境。4,你需要一個自動化的上線系統。5,一個開發流程適合前後端的。1,本地反向代理線上真實環境開發即可。(apache,nginx,nodejs均可實現)
2,模擬線上的測試環境,其實就是你需要一台有真實數據的測試機么,我建議沒條件搭daily的,就直接用線上數據測好了,只不過程序部分走你們的測試環境而已,有條件搭daily當然最好咯。3,可連調的測試環境,分為2種。一種是你們開發測試都在一個區域網段,直接綁hosts就完了,不在一個網段,就一人給一台虛擬的測試機,放在大家都可以訪問到的公司內網,代碼直接往上布即可。
4,自動化的上線系統,如果你們運維不給你們做,我猜你們都是直接ftp往線上扔?那麼你可以自己做一個簡易的上線系統。原理不複雜,每次上線時都抽取最新的trunk或master,做一個tag,再打一個時間戳的標記,然後分發到cdn就行了。界面里就2個功能,打tag,回滾到某tag,部署【夠簡易了吧,而且是全自動的】。5,開發流程就是看項目了還有所用到的工具,構建,框架了。簡單來說,原則就是分散獨立開發,互相不干擾,連調時有hosts可綁即可。回答了你的問題之後,我說下我自己的項目是怎麼個開發流程。
灰常簡單,代碼管理工具是svn,起新需求就起新分支,獨立開發,開發完合併到trunk,trunk不做任何開發工作,只負責merge。
上線有上線系統,你可以理解為我上面說的那個簡易功能的加強版。我們是自帶build的功能的。
自己編寫build腳本,ant,grunt隨便了。做好連到發布系統,一鍵集成,本地只關心源碼開發。
本地環境,我拿nodejs寫了一個自帶rewrite,反向代理的server,超級模擬線上,一個hosts組管理的工具,一套適合自己部門的grunt插件庫【就是很多很多grunt插件。。】。完全適合開發各種獨立項目了。
當然如果你的測試,文檔都集成在build那一步,是最棒的了。
協同合作我們是每個人開發都有一台自己的測試機,linux的,我本地也有工具可以完成自動build+push的功能。方便快捷。
可能全看下來挺複雜,不過前端工程化確實就是這個樣子。幫你脫離之前的手忙腳亂,專註於業務的開發。
各位大神輕噴。我只是分享自己的經驗。。先上圖如果看懂了的話就不用看下面說明了。。。---------------------# 背景
這個項目剛到v0.5,只上了幾次線了。遠不是成熟項目,只能作為參考。估計後續還得改。歡迎大家提建議~
項目是 Java Spring MVC項目。前台端代碼在一個項目里。版本管理採用maven + git(stash),任務管理用JIRA,文檔管理用Confluence。發布系統是公司內部的發布系統,而不是Bamboo。# 幾個概念## ops最中間的那個大方框。ops系統,公司運維做的,是用來發布項目的。從git庫中拷出代碼相應的branch,根據maven的profile 編譯代碼,測試,部署可執行文件到server上,重啟應用。ops有兩個系統,線上和線下。就是大框裡面的兩個小框。有office的是辦公室發布系統(線下)的。automan-xxx 就是對應不同的部署應用。因為branch,profile和server不一樣,不同的應用有不同的功能。大致功能是:## branch
git的分支。可以理解成 按用途歸類的版本集合。### 各分支的功能* master 用於線上發布* feature-xxx 用於添加功能,添加完刪除* develop 用於合併feature分支。* release 用於發布前的測試,發布完刪除* bugfix-xxx 用於修復develop和master分支的bug。### 各分支的關係和流程圖
## profileprofile是maven的參數。maven根據不同的profile,選擇不同的編譯配置,從而編譯出不同配置的可執行文件。### 不同profile的不同用途和編譯配置| 名稱 | 用途資料庫 | 外部環境 || -----------| ----------------------------------------------| -----------|
| offline | 線下和本機測試線下,開發資料庫 | 線下 || develop | 線上develop分支測試線下,開發資料庫 | 線上 || alpha | 線上alpha測試線下,測試資料庫 | 線上 || online | 線上beta測試和線上環境線上,產品資料庫 | 線上 |## server
運用部署的主機,分線上和線下兩套主機。線上主機又分線上測試和線上產品主機。線上測試按不同用途有三組主機:develop,alpha和beta。
因為我們項目沒有綁定域名,所以不需要修改host。直接訪問對應主機的ip或者域名+埠就可以了。
# 流程
主要流程有三個:添加新功能,修復Bug和發布新版本。
## 添加新功能- 發 新功能或改進 類型問題 到 JIRA 比如 ATM-54 重新設計API介面 已解決
- 把問題分配給自己(修復「經辦人」)
- 根據問題的代碼(上面功能的代碼為ATM-54)從develop檢出本地功能分支。比如 feature/ATM-54 或者 簡寫 ATM-54
- 添加功能
- 在本地測試通過
- 提交到本地庫。commit message以 功能的代碼(比如ATM-54)開頭。比如「ATM-54 重新設計API介面」
- push分支到遠程
- 搭建線下測試環境(已有測試環境只需要修改branch)
- 測試功能。如果有bug,修改代碼,跳到5。
- 搭建線上測試環境(已有測試環境只需要修改branch)
- 在線上develop環境測試通過
- 提交pull請求
- 找人 review代碼並merge到develop和master。
## 修復Bug
- 發 bug類型問題 到 JIRA 比如 ATM-57 版本太多顯示不全
- 把問題分配給自己(修改「經辦人」)
- 根據問題的代碼(比如上面問題的代碼為ATM-57)從master檢出本地Bug修復分支。比如 bugfix-ATM-57 或者 簡寫 ATM-57
- 修復bug
- 在本地測試通過
- 提交到本地庫。commit message以 問題的代碼(比如 ATM-57) 開頭。比如"ATM-57 修復 版本太多顯示不全"
- push分支到遠程
- 在線下環境測試通過(小問題可省略)
- 在線上develop環境測試通過
- 提交pull請求
- 找人 review代碼並merge到develop和master。
## 發布新版本
- 給develop添加tag:v+版本號+a
- 從develop檢出release_latest
- 在ops中部署 automan-alpha
- 線上alpha測試
- 如有bug,按照 修復bug流程 修復,並merge到release_latest。重新部署。
- 給release添加tag:v+版本號+b
- 在ops中部署 automan-beta
- 線上beta測試
- 如有bug,按照 修復bug流程 修復,並merge到release_latest。重新部署。
- 給release添加tag:v+版本號
- merge到master。
- 在ops中部署 automan
就用atlassian 那一套不好嗎?
Jira 拿來管理 事件 的, 還有設置Agile 項目管理的。
Git 和 Stash 拿來 code review 和管理 branch 的, 所有的branch 都按照Jira 的事件編號來命名Bamboo 是做 auto-build 的,一旦 stash 提交了pull request, 然後review 通過了, merge 了,自動build,build的過程中可以增加測試。 Mock 的unit test, selenium 這種integrated 也行。每次build 自動運行 (實際上, pull request 的時候就會運行)Confluence 用來寫文檔,記錄工作會議,寫wiki 的。這一套不是挺好的嗎?manager 就負責寫 confluence 和 盯著 agile 來督促 各模塊 (dev,QA, staging, production)就好了;QA負責寫一點 unit test和selenium, 或者給大家買飯盒也行;剩下的程序員 就狂寫代碼,狂提交啊。可以研究下百度出的前端解決方案 Fis
學到老
推薦閱讀:
※如果由蘋果公司設計和生產汽車,那汽車可能會是什麼樣的?
※為什麼Windows的開關機音樂從Vista開始就沒變過,到Windows 10乾脆默認關閉了?
※如何評價螞蟻聚寶升級為螞蟻財富,用戶評價負面?
※iPad mini 和 iPhone 5 之後,原有的設計規範(iOS Human Interface Guidelines)需不需要更新?
※如何評價一款產品或一項功能被用戶接受的難易程度?