<noframes id="5hjpd"><progress id="5hjpd"><form id="5hjpd"></form></progress>

    <noframes id="5hjpd">

    <span id="5hjpd"><progress id="5hjpd"><progress id="5hjpd"></progress></progress></span>
      <noframes id="5hjpd">
      <ins id="5hjpd"><sub id="5hjpd"><rp id="5hjpd"></rp></sub></ins>
      <del id="5hjpd"><big id="5hjpd"></big></del>
      <track id="5hjpd"></track>

      Web 持續集成工作實踐

      導語   背景  2015年10月我加入一家已盈利的創業公司,負責 Web 技術方向! 摌I過程中為了生存,都是拼快拼狠,難免選用猛糙快的工作方法! ‰S著業務和團隊不斷擴大,面對的問題也越來越具挑戰性! ∥

        背景

        2015年10月我加入一家已盈利的創業公司,負責 Web 技術方向。

        創業過程中為了生存,都是拼快拼狠,難免選用猛糙快的工作方法。

        隨著業務和團隊不斷擴大,面對的問題也越來越具挑戰性。

        我逐步將一些自動化工具和方法引入到日常工作中,使團隊獲得一些收益。

        本文總結我這一年來做持續集成的獲得經驗教訓。

        由于本人技術視野有限,難免考慮不周,歡迎各位同行斧正。

        什么是持續集成(Continuous integration)?

        個人理解:持續集成是通過平臺串聯各個開發環節,實現和沉淀工作自動化的方法。

        持續集成在敏捷開發中運用得非常廣泛,幾乎成了各種項目的標配。

        我認為持續集成是研發團隊負責人必須了解和掌握的方法。

        我們為什么要做持續集成

        引入各種方法都是為了解決各種問題。

        引入持續集成之前碰到的問題

        線上代碼和代碼倉庫不同步,影響迭代和團隊協作

        加盟公司后,我發現上線部署是通過 FTP 直接上傳代碼,使用文件比較工具進行代碼合并。由于配置不一樣,修改的人不一樣,經常導致代碼倉庫和線上代碼不統一。每次上線之前代碼都要做一次線上線下手工合并。

        靜態資源發布依賴人工,浪費開發人力

        圖片資源轉碼、壓縮、部署都需要人工介入。靜態資源的 CDN 鏈接也需要人工替換。

        缺少自動化測試,產品質量得不到保障

        每次上線僅僅依賴人工測試,測試用例難以覆蓋所有被影響的功能,常常出現初級的接口問題,直到產品上線用戶反饋后才能發現問題。

        文案簡單修改上線,需要技術介入

        重運營的產品,節假日均有運營活動;顒禹撁娴奈陌感枰\營同學反復推敲,頻繁修改習以為常?擅看涡薷奈陌付夹枰邪l同學介入才能部署生效。為修改一個字,研發就需要陪運營熬到很晚。

        持續集成的需求

        為了解決上述這些問題,我們迫切需要改變一下工作方法,梳理需求如下。

        自動化

        不想把任務丟給機器執行的程序員不是好程序員。〒屧嘛灣猓

        自動編譯

        自動引入各種依賴(開發依賴、包依賴、配置依賴)。資源自動轉碼、合并、壓縮。自動處理配置文件。

        自動部署

        靜態資源自動上傳 CDN 服務器。應用文件自動上傳和同步到應用服務器。

        自動測試

        自動進行單元測試、集成環境測試。

        自動監控

        構建異常、測試異常、運行異常自動通知相關負責人。

        團隊協作

        持續集成也不僅是研發崗位需要, 測試、產品、設計師、運維等崗位一樣需要。

        設計師更新圖片素材

        設計師可以直接更新圖片資源,圖片自動切割、轉碼、上線

        團隊成員(包括:測試、產品經理)能以最快的時間測試和體驗最新版本

        第一時間部署內測版本,并自動通知團隊成員

        運營策劃可直接修改活動、幫助文案

        面向用戶的說明文檔,如僅文案修改不需要介入研發人力,即可完成線上更新。

        數值工程師可以直接更新數值配表

        數值工程師指游戲場景中設計裝備、屬性和等級數值關系的人。數值配置通常是一份 Excel 文件。需要自動編譯、更新和推演。

        適配各種運行環境

        本機環境 local

        應用能最少依賴在本機運行。能夠及時修改和預覽代碼。能夠模擬運行環境(接口或數據)。

        模擬 Ajax,推薦使用 Mock.js

        開發環境 develop

        一般 Web 項目上線前,都會有一個局域網的開發環境供團隊成員測試和體驗。開發環境有完整的沙盒數據與線上隔離。方便打印完整日志、提供特權供。

        線上環境 online

        線上環境也叫生產環境,直接面向用戶。訪問的是真實數據,測試和體驗時需非常謹慎。

        通常會上線多個版本,方便測試和回滾。

        敏捷開發

        時間上:小步快跑,推進每次迭代速度,沉淀工作方法

        空間上:將各個崗位的工作匯集和串聯實現自動化

        怎么做持續集成

        需要的工具

        工欲善其事必先利其器。如今持續集成被應用得如此廣泛,必然有很多成熟的工具可以選用。

        統一的代碼倉庫

        強烈推薦 GitLab,類似一個私有 GitHub。代碼倉庫、里程碑、成員、靜態資源、文檔、持續集成、靜態網站等等,幾乎覆蓋軟件開發需要的各項功能。

        持續集成平臺

        我們使用的是老牌持續集成平臺 Jenkins,當然也有很多后起之秀比如 Travis CI,GitLab 自身也有一套 CI 服務。

        構建工具

        Web 構建工具也是百花齊放。我們選用的是 FIS3 和 Gulp。主要是除了前端以外,我們還要處理 PHP、NodeJS、Go 等運行環境。

        部署工具

        由于多數情況使用的是 FIS 發布,所以自己擴展了 FIS 部署接收器。但從性能、安全性上推薦 rsync 老牌的同步工具。

        其他

        為兼顧團隊成員同時使用 Windows 和 Mac 開發,測試、編譯環節盡量使用 NodeJS、PHP 這類跨平臺的腳本。而在構建平臺里我們選用 Shell,編寫構建任務,以便跨語言使用。各種工具需要的運行環境就不一一贅述。

        工具都在不斷演進,需根據自身團隊情況自行挑選。

        持續集成工作示意圖

      web持續集成

      創建 CI 項目

        如果使用 GitLab + Jenkins 組合參考:Gitlab Hook Plugin

        基礎設置

        項目名稱、描述、任務類型等等

        指定代碼倉庫和相關授權用戶

        指定代碼倉庫訪問鏈接、有權限拉取相關代碼的授權用戶

        設置構建觸發器

        指定觸發類型同時在代碼倉庫平臺(如:GitLab)添加觸發構建請求的時機和地址。

        設置構建腳本

        設置構建腳本,建議使用 Shell

        根據自身項目特點,我們約定了幾個常用的 NPM Scriptsnpm run online  # 構建到線上環境npm run develop # 構建到開發環境npm run stable  # 構建到內網穩定版npm run debug   # 啟動本機調試

        設置構建異常通知

        指定構建負責人的郵件,當發生構建發生異常和修復時通知負責人。

        收益

        陸陸續續對持續集成的探索和實施,確實有一些顯而易見的收益

        降低人工成本

        重復繁瑣的工作可以自動化。團隊工作流程可以不斷完善和沉淀。

        提高產品穩定性

        部署前測試、部署后測試,測試用例覆蓋各個基本功能。測試發現和用戶反饋 Bug 可以轉為用例,持續加強測試覆蓋率。

        降低代碼維護成本

        通過構建過程自動配置各種運行環境,整個開發過程均只維護一套代碼倉庫。

        加快產品迭代速度

        每次代碼文檔變更均產出可體驗的版本,加速測試和體驗產品介入的時間。

        構建實例

        舉幾個實際的例子

        網頁游戲素材資源自動上線

        換裝類游戲,經常會添置服裝飾品。設計師提供 png 素材,由構建工具自動轉成 webp 資源發布到 CDN。

        日;顒游陌父陆唤o運營

        將運營的同學加到 GitLab 項目成員。運營同學不需要安裝其他軟件,直接在瀏覽器中修改 GitLab 項目文件(通常是 HTML 中的文案),保存即刻更新上線。

        集群服務自動部署和測試

        高并發的 Web 應用,通常都有很多分片(可以理解為多個主機)。代碼需要同步到各個分片上,而各個分片可能有微小差異,不一定每次代碼迭代全都能正常運行。我們將每一個分片提出一個測試端口,上線前各個分片均做一次測試用例覆蓋,確保集成服務的穩定性。

        使用成本

        解決老問題的同時也會帶來新的問題。

        學習和使用成本

        持續集成幾乎覆蓋了開發環節和運行環境方方面面,普通項目組成員不一定都能接觸。所以我給組內的同學下放更多的內網環境權限。當然我們也可以自行安裝相關環境。

        線上環境隱私保護

        線上環境的操作需要十分謹慎,一些配置有很高的保密性。包括不限于:第三方支付授權碼、第三方應用授權碼、文件部署授權碼、數據庫用戶身份,即:各種重要的私密配置。

        我們的做法是準備另一套代碼倉庫專門管理線上配置,僅對管理員開放。

        區分不同運行環境

        本機運行、開發環境(個人開發環境、穩定版、開發版)、線上環境(預上線、灰度上線),都需要通過配置或環境變量區分。

        構建過程自身異常

        就構建本身也可能出現異常。如:構建機器軟硬件異常(網絡中斷、磁盤滿了、編譯依賴升級失。。還有節假日不在辦公環境。

        需要準備短時手工介入維護的方案,比如:預留個系統升級頁面,可以爭取時間,不容易降低用戶體驗。

        錯誤覆蓋線上項目的風險

        有時為趕項目進度,使用了程序員必殺技 Ctrl+C、Ctrl+V?寺嫿ㄈ蝿找彩怯酗L險的,因為有相同的部署配置,處理不好會覆蓋之前的線上代碼,導致線上事故。

        為避免這種問題出現,我們在構建前加了一段代碼以核對構建項目名稱

        node -e 'if(require("./package.json").JOB_NAME!==process.env.JOB_NAME){console.error("JOB_NAME Error.");process.exit(1)}'

        實踐經驗

        定義項目

        無論是前端項目還是后端項目(PHP、NodeJS、Go),我們均用 package.json 來定義。方便統一項目名稱、版本、構建腳本的來源。

        構建過程使用跨平臺的腳本

        可以選用 PHP、NodeJS、Python 等跨平臺的腳本,方便運行到各種環境中。不建設使用 VBScript 或 JScript,僅能在 Windows 直接運行的腳本。

        編寫小成本測試用例

        編寫測試用例也不一定要引入重型的測試框架,其實只要進程以非零狀態退出就可以中斷構建過程。NodeJS 用 process.exit(1);,PHP 用 exit(1);構建項目規范

        沒有規矩不成方圓,使用統一的規范可以更好的進行團隊協作。

        比如:用 package.json 聲明項目、用 NPM Scripts 寫構建入口腳本、用 JOB_NAME 字段核對構建項目。

        手動構建

        為避免開發期成員部署項目互相干擾,特給每個成員分配一個性端口。代碼不需要提交到倉庫,通過手動部署相應項目。

        使用 jdists 配置不同運行環境

        最后安利一下:jdists -- 強大的代碼塊預處理工具,輕松適配各種運行環境。

      http://www.randomwithlife.com/ true Web 持續集成工作實踐 http://www.randomwithlife.com/show-26-1028-1.html report <?php echo strlen($content) / 2; ?>   背景  2015年10月我加入一家已盈利的創業公司,負責 Web 技術方向! 摌I過程中為了生存,都是拼快拼狠,難免選用猛糙快的工作方法! ‰S著業務和團隊不斷擴大,面對的問題也越來越具挑戰性! ∥
      TAG:Web 持續集成
      本站歡迎任何形式的轉載,但請務必注明出處,尊重他人勞動成果
      轉載請注明: 文章轉載自:愛思資源網 http://www.randomwithlife.com/show-26-1028-1.html

      [前端插件推薦] Plugin

      1 2 3 4
      • jQuery實現逐字逐句顯示插件l-by-l.min.js
      • jQuery帶方向感知的鼠標滑過圖片邊框特效插件
      • jQuery HotKeys監聽鍵盤按下事件keydown插件
      • 響應式無限輪播jQuery旋轉木馬插件
      響應式無限輪播jQuery旋轉木馬插件
      web前端開發
      愛思資源網 Copyright 2012-2014 www.randomwithlife.com All rights reserved.(晉ICP備13001436號-1)
      欧美精品久久久久久久自慰

      <noframes id="5hjpd"><progress id="5hjpd"><form id="5hjpd"></form></progress>

        <noframes id="5hjpd">

        <span id="5hjpd"><progress id="5hjpd"><progress id="5hjpd"></progress></progress></span>
          <noframes id="5hjpd">
          <ins id="5hjpd"><sub id="5hjpd"><rp id="5hjpd"></rp></sub></ins>
          <del id="5hjpd"><big id="5hjpd"></big></del>
          <track id="5hjpd"></track>