[譯] 使用 Travis CI 自動釋出 npm

Starrier發表於2018-03-22

使用 Travis CI 自動釋出 npm

npm 登錄檔釋出一個包應該是很無聊的,在這篇部落格中,我描述瞭如何在每次打 git 標籤時使用 Travis CI 來發布 npm 包。

使用 Travis CI 自動釋出 npm

在 TailorDev,我們喜歡自動化構建軟體所需的許多重要步驟。其中一個步驟是釋出最終的,即可生產的應用程式包,也稱為工件或者包。今天,我們關注於 JavaScript 世界,描述如何不花費太大心血而在 npm 登錄檔中實現包的自動化釋出過程。

首先,npm 在 2017 年推出了 雙因素認證 (簡稱 2FA),這是一個很好的想法,直到我們發現了它是“全部或者沒有”!:confused:。事實上, npm 2FA 依賴於一次性密碼來保護賬戶以及與您賬戶相關的所有內容,並自動實現這一功能,從而無法實現 2FA 的功能。

**但是為什麼這會如此重要呢?**我很高興您會這麼問,因為我們在續集中需要一個 API 令牌,而且目前不可能在不觸發 2FA 機制的情況下生成和使用令牌。換句話說,啟用 2FA,幾乎不可能自動化 npm 釋出過程,“幾乎”是因為 npm 實現了雙級別身份認證: auth-onlyauth-and-writes。通過將 2FA 的使用限制在 auth-only 上,我們就可以使用 API 令牌,但安全性較低。我們真的希望 npm 可以在不久的將來為自動化任務設計的 auth 令牌,同時:

$ npm profile enable-2fa auth-only
複製程式碼

一旦您的賬戶啟用了 auth-only 用法的 2FA (順便說一句,這比沒有啟用 2FA 更好),那就讓我們開始建立一個令牌:

$ npm token create

+----------------+--------------------------------------+
| token          | a73c9572-f1b9-8983-983d-ba3ac3cc913d |
+----------------+--------------------------------------+
| cidr_whitelist |                                      |
+----------------+--------------------------------------+
| readonly       | false                                |
+----------------+--------------------------------------+
| created        | 2017-10-02T07:52:24.838Z             |
+----------------+--------------------------------------+
複製程式碼

這個令牌將由 Travis CI 用於代表您進行身份驗證。我們也可以使用 Travis CLI 將該令牌作為環境變數進行加密或者在 Travis CI 儲存庫設定中定義一個變數,,這樣做將會更方便。宣告兩個私密環境變數 NPM_EMAILNPM_TOKEN

Travis CI 設定

現在,最重要的部分是建立一個實際釋出 npm 包的任務。我們決定利用構建階段(測試版)特性結合 Travis CI 推薦的方式釋出 npm 包。為了做記錄,我們希望每次構建版本只發布一次。不管現有的構建矩陣如何,我們還希望在釋出 npm 包時使用 git 標籤,以便在 npm 版本和 GitHub 版本之間保持一致。

我們從一個用於 JavaScript 專案的標準 .travis.yml 檔案開始,在該文中對程式碼進行了 Node 8 和 9 的測試,並使用 yarn 作為包管理器:

language: node_js
node_js:
  - "8"
  - "9"

cache: yarn

install: yarn
script:
  - yarn lint
  - yarn test
複製程式碼

標準 Travis CI 輸出帶有兩個 JavaScript 任務

我們現在可以通過將以下配置新增到之前的 .travis.yml 檔案中來配置“部署”任務:

jobs:
  include:
    - stage: npm release
      if: tag IS present
      node_js: "8"
      script: yarn compile
      before_deploy:
        - cd dist
      deploy:
        provider: npm
        email: "$NPM_EMAIL"
        api_key: "$NPM_TOKEN"
        skip_cleanup: true
        on:
          tags: true
複製程式碼

讓我們一行一行地分析。首先,當且僅當 IS 標籤存在 時,我們“加入”一個新的 npm 釋出階段,這意味著構建已經被 git 標記觸發。我們選擇 node 8 (我們的生產版本) 並執行 yarn compile 來構建我們的包。此指令碼會建立包含可以在 npm 登錄檔上釋出包檔案的 dist/ 資料夾。最後但同樣重要的一點是,我們呼叫 Travis CI deploy 命令在 npm 登錄檔來實際釋出包(同時我們將此命令限制為 git 標記,僅作為額外的保護層)。

注意:為了防止 Travis CI 清理額外的資料夾並刪除你做的改變,請在釋出前將 skip_cleanup 設定為 true

帶有 JavaScript 的 Travis CI

這很酷,不是麼?

:sunglasses:
:sunglasses:

優點:npm 像專業版一樣釋出

為了建立新版本,我們使用 npm 版本 (它內建在 npm

:rocket:
:rocket:
)。假設我們當前版本是 0.3.2,我們想釋出 0.3.3。在 master 分支上,我們執行以下命令

**$ npm version patch**
複製程式碼

該命令執行以下任務:

  1. package.json 中插入(更新)的版本號
  2. 建立一個新的提交
  3. 建立一個 git 標籤

我們可以使用 npm version minor0.3.1 釋出 0.4.0 (它會顛倒第二個數字並重置最後一個數字)。我們也可以使用 npm version major0.3.1 釋出 1.0.0

一旦使用 npm version 命令完成後,您就可以執行 git push origin master --tag 並稍等片刻,直到包在 npm 登錄檔上釋出。

:tada:
:tada:


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章