<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          自動化為你的項目添加證明可靠性的 badge

          共 3721字,需瀏覽 8分鐘

           ·

          2021-01-06 18:41

          作者:calimanco
          來源:SegmentFault 思否社區(qū)



          前言


          開源社區(qū)里,開源項目一般會將一排花花綠綠的 badge(徽章)擺在 README 最顯眼的位置,它們一般可以起到一些說明和證明的作用。
          比如下面的這個項目

          https://github.com/calimanco/promise-polyfill-plus


          • 第一個 badge 證明其能正常構(gòu)建,點擊跳轉(zhuǎn)至構(gòu)建過程報告;
          • 第二個 badge 證明其測試覆蓋率達到100%,點擊跳轉(zhuǎn)至單元測試報告;
          • 第三個 badge 說明其是 MIT 授權協(xié)議;
          • 第四個 badge 說明其最小化后包的大小;


          別以為他們只是圖片,正規(guī)的項目是隨項目更新而更新的,點擊不了或者點擊進入的不是對應項目的報告都可以算作偽造,請遠離這些項目。

          上面提到的 badge 中前兩個可以算是項目可靠性的證明,是比較有份量的 badge,接下來我們將指引大家如何自動化添加這兩 badge。

          注意:本文以 Github 為代碼倉庫,第三方帳號授權都以 Github 帳號進行,請確保自身網(wǎng)絡環(huán)境能正常訪問;不涉及項目本身的構(gòu)建和測試。



          準備


          • 編寫一個項目,在 package.json 中以“build”為構(gòu)建命令,dist 為打包后輸出的目錄;
          • 編寫好該項目的單元測試,在 package.json 中以“test:prod”為測試命令,并且會自動在 coverage 目錄下生成覆蓋率報告;
          • 為項目安裝 devDependencies(開發(fā)依賴):
            • coveralls
          • 注冊一個 Github 帳號,提交項目到一個倉庫。




          Travis 配置


          Travis CI 提供的是持續(xù)集成服務(Continuous Integration,簡稱 CI)。它綁定 Github 上面的項目,只要有新的代碼,就會自動抓取。然后,提供一個運行環(huán)境(容器),執(zhí)行測試,完成構(gòu)建,還能自動部署到服務器。

          本次的自動化就是依靠這個服務完成的,這里只展示相關的配置,更多的用法請自行查看文檔。

          新建配置文件


          在項目根目錄下新建 .travis.yml 文件,輸入下面配置并保存。

          language:?node_js
          cache:?npm
          notifications:
          ??email:?false
          node_js:
          ??-?'10'
          script:
          ??-?npm?run?test:prod?&&?npm?run?build
          after_success:
          ??-?npm?run?report-coverage
          branches:
          ??except:
          ????-?/^v\d+\.\d+\.\d+$/

          配置說明:

          • language:Travis 可以支持多種語言,這里是 node 項目,填“node_js”即可;
          • cache:緩存,可加快構(gòu)建。配置為 npm 會緩存 $HOME/.npm 和 node_modules 目錄;
          • notifications:默認情況下會郵件通知提交者和作者,如果不需要則設置為 false,還支持設置鉤子、接口通知等方式,詳細見文檔
            https://docs.travis-ci.com/user/notifications#configuring-email-notifications
          • node_js:運行容器安裝的 node 版本,這里是指構(gòu)建和測試的環(huán)境,與實際運行環(huán)境是不同的,一般與本機相同即可,設置多個的話每次每一個都會運行一次,會增加構(gòu)建時間;
          • script:要運行的命令,這里我們進行的就是單元測試和構(gòu)建兩步操作;
          • after_success:script 運行結(jié)束,且無錯誤的情況下運行的命令,這里我們進行單測覆蓋率報告提交;
          • branches:需要運行的 git 分支,默認是只運行主分支,這里我們增加了對“vXX.XX.XX”分支的支持。

          開啟 Travis 監(jiān)聽


          1. 進入 Travis 官網(wǎng):https://travis-ci.com/
          2. 用 Github 帳號授權登錄;
          3. 點擊左上角的加號,或者點擊指引里的按鈕,進入對 Github 倉庫進行授權;


          4. 可以選擇授權當前 Github 帳號的部分倉庫,也可以選擇全部。


          獲取構(gòu)建 badge 代碼


          待倉庫導入后,進入項目主頁,右上角就能看到 badge,點擊它會彈出一個選擇代碼類型的彈框,選擇需要的類型復制粘貼到 README 就行了(一般選擇 Markdown)。




          Coveralls 配置


          Coveralls 是一個展示單元測試覆蓋率報告的網(wǎng)站,它本身不會運行單測或生成報告,它只是提供用于提交標準單元測試覆蓋率報告的包(也就是上面準備階段安裝的coveralls),可以配合測試套件使用。

          編寫提交命令


          以 Jest 為例,默認運行jest --coverage后會在 coverage 目錄下生成標準的單測報告。但我們不需要在本地跑,Travis 會幫我們完成,只需要確保可以目錄正確即可。

          上面 .travis.yml 中我們使用了“report-coverage”命令,這個是自定義的 scripts,在 package.json 里的 scripts 塊中寫入該命令,

          "scripts":?{
          ??"report-coverage":?"cat?./coverage/lcov.info?|?coveralls",
          }

          開啟 Coveralls 監(jiān)聽


          1. 進入 Coveralls 官網(wǎng):https://coveralls.io/;
          2. 用 Github 帳號授權登錄;
          3. 點擊右側(cè)加號(ADD REPO);
          4. 把需要的項目的開關打開;


          獲取覆蓋率 badge 代碼


          點擊 DETAILS 進入詳情頁,這時候你還未有報告,所以看到的是指引頁,我們可以先在底部找到獲取 badge 代碼的入口,選擇需要的類型復制粘貼到 README 就行了(一般選擇 Markdown)。




          完成,啟動 Travis


          將 .travis.yml、package.json 和 README 提交,Travis 監(jiān)聽到提交就會啟動運行。偶爾第一次未成功 ,可以點擊 Travis 的項目詳情頁右側(cè),點擊“Trigger build”手動開啟。




          額外配置(可選)


          因為 Coveralls 本身就已經(jīng)能與 Travis 無縫配合,默認情況下它們會識別相同的倉庫,并更新。

          但如果你使用的是 Travis Pro(Travis 的付費版,一般免費的已經(jīng)夠用)和其他 CI 系統(tǒng),或者需要非 git 主分支的結(jié)果時,需要進行寫入環(huán)境變量告知系統(tǒng)。

          Coveralls 提供三個必填項:

          • COVERALLS_SERVICE_NAME:CI 系統(tǒng)名,比如 travis-pro;
          • COVERALLS_REPO_TOKEN:Coveralls 給每個項目的唯一標識,也是提交單測覆蓋率報告的依據(jù);
          • COVERALLS_GIT_BRANCH:提交報告是哪個 git 分支。


          全局的環(huán)境變量


          如果是全局的變量,可以直接寫到 .travis.yml 文件的 env 塊。比如:

          env:
          ??-?DB=postgres
          ??-?SH=bash
          ??-?PACKAGE_VERSION="1.0.*"

          局部的環(huán)境變量


          如果是每個命令獨立使用的變量,可以直接寫到 .travis.yml 文件的 script 塊里的命令里。

          script:
          ??-?COVERALLS_GIT_BRANCH=test?npm?run?test:prod?&&?npm?run?build

          當然同理寫到 package.json 文件的 script 也是可以的。

          一些不能公開的變量


          無論寫到 .travis.yml 或 package.json 文件都需要提交的 git,這些內(nèi)容都會公開(公共倉庫),但類似 COVERALLS_REPO_TOKEN 這類數(shù)據(jù)是不能公開的。

          因此我們可以將他們寫到 Travis 上項目的設置里(這不是加密,如果要更加嚴格的加密,可以使用加密文件,詳情看Travis 文檔)。
          https://docs.travis-ci.com/user/encrypting-files/

          1. 進入項目對應的 Travis 主頁;
          2. 點擊右上角的“More options”里“Settings”;
          3. 在“Environment Variables”塊進行“ADD”操作。




          結(jié)束


          教程到此已經(jīng)完成,整體流程就是:通過 Travis 配置監(jiān)聽 Github 上對應倉庫的提交,Travis 發(fā)現(xiàn)提交就拉取代碼,在 Travis 提供的容器里完成構(gòu)建和單元測試,完成后再自動提交單測覆蓋率報告到 Coveralls,最終結(jié)果反映到 README 的 badge 上。

          一勞永逸,還不趕緊試試。



          點擊左下角閱讀原文,到?SegmentFault 思否社區(qū)?和文章作者展開更多互動和交流。

          -?END -

          瀏覽 31
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国模逼逼 | 欧美成人Aⅴ | 国产日韩欧美一区 | 日本一级黄色视频 | 91精品干|