內容來源:2017年3月11日,下劃線技術總監王集鵠在「HTML5夢工場 & 微軟開發者沙龍第02期——HTML5營銷開發」進行《Web持續集成工做實踐》演講分享。IT大咖說做爲獨家視頻合做方,經主辦方和講者審閱受權發佈。
閱讀字數:2395 | 5分鐘閱讀
若是團隊開發成員常常集成他們的工做,每一個成員天天至少集成一次,也就意味着天天可能會發生屢次集成。每次集成都經過自動化的構建來驗證,從而儘快地發現集成錯誤。那麼這個過程能夠大大減小集成的問題,讓團隊可以更快的開發內聚的軟件。html
在2015年10月我加入了一家創業公司。創業公司的工做方法就像打開冰箱門作一頓飯,看到冰箱裏有什麼就作什麼,更不要說什麼持續集成了。
前端
當創業公司不斷壯大,就會出現各樣的問題。持續集成是經過平臺串聯各個開發環節,實現和沉澱工做自動化的方法。持續集成是一個持續的過程,不能一步到位。它是不斷完善、不斷迭代去修復問題,當新的需求或問題出現的時候再去知足它。自動化就是能交給機器的都交給機器去作。程序員
線上代碼和代碼倉庫不一樣步。加盟公司後,我發現上線部署是經過FTP直接上傳代碼,使用文件比較工具進行代碼合併。因爲配置不同,修改的人不同,常常致使代碼倉庫和線上代碼不統一。每次上線以前代碼都要作一次線上線下手工合併。數據庫
缺乏自動化測試。每次上線僅僅依賴人工測試,測試用例難以覆蓋全部被影響的功能,經常出現初級的接口問題,直到產品上線用戶反饋後才能發現問題。json
只有程序員才能上線。活動頁面的文案須要運營同窗反覆推敲,頻繁修改習覺得常。可每次修改文案都須要研發同窗介入才能部署生效。爲修改一個字,研發就須要陪運營熬到很晚。後端
自動編譯:自動引入各類依賴(開發依賴、包依賴、配置依賴)。資源自動轉碼、合併、壓縮。自動處理配置文件。瀏覽器
自動部署:靜態資源自動上傳CDN服務器。應用文件自動上傳和同步到應用服務器。服務器
自動測試:自動進行單元測試、集成環境測試。網絡
自動監控:構建異常、測試異常、運行異常自動通知相關負責人。架構
成員快速體驗最新版本。第一時間部署內測版本,並自動通知團隊成員。
策劃直接修改文案上線。面向用戶的說明文檔,如僅文案修改不須要介入研發人力,便可完成線上更新。
設計師直接更新素材。設計師能夠直接更新圖片資源,圖片自動切割、轉碼、上線。
數值工程師直接更新配表。數值工程師指遊戲場景中的設計裝備、屬性和等級數值關係的人。數值配置一般是一份Excel文件。須要自動編譯、更新和推演。
本機環境local:應用能最少依賴在本機運行。可以及時修改和預覽代碼。可以模擬運行環境(接口或數據)。
開發環境develop:通常Web項目上線前,都會有一個局域網的開發環境供團隊成員測試和體驗。開發環境有完整的沙盒數據與線上隔離。方便打印完整日誌、提供特權。
線上環境online:線上環境也叫生產環境,直接面向用戶。訪問的是真實數據,測試和體驗時需很是謹慎。一般會上線多個版本,方便測試和回滾。
時間上要小步快跑,推動每次迭代速度,沉澱工做方法。
空間上要將各個崗位的工做聚集和串聯實現自動化。
統一的代碼倉庫GitLab;
構建平臺Jenkins、Travis CI;
構建工具Gulp、FIS3;
部署工具rsync。
進行基礎設置,指定代碼倉庫和相關受權用戶,設置構建觸發器,設置構建腳本,設置構建異常通知。
簡單文案更新由運營同窗完成。運營同窗不須要安裝其它軟件,直接在瀏覽器中修改GitLab項目文件(一般是HTML中的文案),保存即刻更新上線。
數值工程師配表。數值工程師經過修改Excel文件,更新數值配置。
設計師發佈CDN資源。在GitLab中可直接拖拽文件上傳。轉碼、部署自動完成。
集羣服務自動部署和測試。高併發的Web應用,一般都有不少分片(能夠理解爲多個主機)。代碼須要同步到各個分片上,而各個分片可能有微小差別,不必定每次代碼迭代全都能正常運行。咱們將每個分片提出一個測試端口,上線前各個分片均作一次測試用例覆蓋,確保集成服務的穩定性。
持續集成幾乎覆蓋了開發環節和運行環境方方面面,普通項目組成員不必定都能接觸。因此我給組內的同窗下放更多的內網環境權限。固然咱們也能夠自行安裝相關環境。
線上環境的操做須要十分謹慎,一些配置有很高的保密性。包括但不限於第三方支付受權碼、第三方應用受權碼、文件部署受權碼、數據庫用戶身份,也就是各類重要的私密配置。
本機運行、開發環境(我的開發環境、穩定版、開發版)、線上環境(預上線、灰度上線),都須要經過配置或環境變量區分。
就構建自己也可能出現異常。例如構建機器軟硬件異常(網絡中斷、磁盤滿了、編譯依賴升級失敗),還有節假日不在辦公環境。
克隆構建任務也是有風險的,由於有相同的部署配置,處理很差會覆蓋以前的線上代碼,致使線上事故。
不管是前端項目仍是後端項目(PHP、NodeJS、Go),咱們都用package.json來定義。方便統一項目名稱、版本、構建腳本的來源。
能夠選用PHP、NodeJS、Python等跨平臺的腳本,方便運行到各類環境中。不建議使用VBScript或JScript,僅能在Windows直接運行的腳本。
編寫測試用例也不必定要引入重型的測試框架,其實只要進程以非零狀態退出就能夠中斷構建過程。NodeJS用process.exit(1);,PHP用exit(1);。
爲避免開發期成員部署項目互相干擾,給每一個成員分配了一個獨立端口。代碼不須要提交到倉庫,經過手動部署相應項目。
上圖是不一樣的開發過程。從需求階段,到開發、測試、上線,再到運維,信息層貫穿了整個工做流。
產品和研發會變動項目成員、項目文檔或一些基本信息,作一個項目管理。
研發和設計師會不斷地更新素材、文案和代碼以及開發文檔,全部東西都會進入代碼倉庫。
每次代碼變動都會通知構建平臺,構建平臺從代碼倉庫中拉取代碼和配置進行構建。構建完成後就把構建好的文件部署到各個環境中去。
測試完就能夠發佈了,上線後進行同步,最後進行自動化測試。這就是整個上線流程。
我今天的分享就到這裏,感謝聆聽!