<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] > [參考:阮一峰](http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html) ## 概述 ### 1. 持續集成 - 持續集成指的是,頻繁地(一天多次)將代碼集成到主干 - 核心措施是,代碼集成到主干之前,必須通過自動化測試。只要有一個測試用例失敗,就不能集成 與持續集成相關的,還有兩個概念,分別是持續交付和持續部署。 ### 2. 持續交付 持續交付(Continuous delivery)指的是,頻繁地將軟件的新版本,交付給質量團隊或者用戶,以供評審。如果評審通過,代碼就進入生產階段 它強調的是,不管怎么更新,軟件是隨時隨地可以交付的 ### 3. 持續部署 持續部署(continuous deployment)是持續交付的下一步,指的是代碼通過評審以后,自動部署到生產環境。 持續部署的目標是,代碼在任何時刻都是可部署的,可以進入生產階段。 ## 流程 ![](https://img.kancloud.cn/e1/ae/e1ae39ea80c19c3d91459fa1200336fd_1080x427.png) ![](https://img.kancloud.cn/b0/3b/b03bc5ae5de238948d92fb53989b54a6_929x300.png) ### 1. 提交 流程的第一步,是開發者向代碼倉庫提交代碼。所有后面的步驟都始于本地代碼的一次提交(commit)。 ### 2. 測試(第一輪) 代碼倉庫對commit操作配置了鉤子(hook),只要提交代碼或者合并進主干,就會跑自動化測試 測試有好幾種: 1. 單元測試:針對函數或模塊的測試 2. 集成測試:針對整體產品的某個功能的測試,又稱功能測試 3. 端對端測試:從用戶界面直達數據庫的全鏈路測試 第一輪至少要跑單元測試 ### 3. 構建 交付后,就先進行構建(build),再進入第二輪測試。 所謂**構建**,指的是將源碼轉換為可以運行的實際代碼,比如安裝依賴,配置各種資源(樣式表、JS腳本、圖片)等等 <br/> 常用的構建工具如下: * [Jenkins](http://jenkins-ci.org/) * [Travis](https://travis-ci.com/) * [Codeship](https://www.codeship.io/) * [Strider](http://stridercd.com/) Jenkins和Strider是開源軟件,Travis和Codeship對于開源項目可以免費使用 ### 4. 測試(第二輪) 第二輪是全面測試,單元測試和集成測試都會跑,有條件的話,也要做端對端測試。所有測試以自動化為主,少數無法自動化的測試用例,就要人工跑 ### 5. 部署 - 通過了第二輪測試,當前代碼就是一個可以直接部署的版本(artifact),將這個版本的所有文件打包存檔,發到生產服務器 - 生產服務器將打包文件,解包成本地的一個目錄,再將運行路徑的符號鏈接(symlink)指向這個目錄,然后重新啟動應用 這方面的部署工具有[Ansible](http://www.ansible.com/),[Chef](https://www.chef.io/chef/),[Puppet](https://puppetlabs.com/) ### 6. 回滾 一旦當前版本發生問題,就要回滾到上一個版本的構建結果。最簡單的做法就是**修改一下符號鏈接**,指向上一個版本的目錄 ## CI 的流程實踐 CI 主要把關的是代碼活動,一般有兩個觸發點: 1. 代碼合入主干前,觸發 CI 測試,目的是校驗本次合入是否符合質量預期,如果不符合,那么不準代碼合入主干; 2. 代碼合入主干后,觸發 CI 測試,目的是校驗最新的主干分支是否符合質量預期; ### Pre-Merge 觸發過程 1. 開發代碼遞交 Merge Request ( github 上習慣叫做 PR,gitlab 上習慣叫做 MR ) 2. MR 自動觸發 CI 構建事件 3. 運行 靜態檢查,Merge 檢查,單元測試,冒煙測試,集成測試,全部通過之后,代碼才允許 Merge 合入主干分支; 4. 進行下一步軟件活動 ### Post-Merge 觸發過程 1. 管理員審核 Merge Request 通過,代碼合入主干,觸發 Post-Merge 事件; 2. CI 平臺收到事件,自動進行 CI 構建; 3. 構建完成,進行下一步軟件活動;
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看