Github 持續化集成 工作流 Npm包自動化發布


Github 持續化集成 工作流 Npm包自動化發布

簡介

  持續集成指的是,頻繁地(一天多次)將代碼集成到主干。
它的好處主要有兩個:
  1. 快速發現錯誤。每完成一點更新,就集成到主干,可以快速發現錯誤,定位錯誤也比較容易。
  2. 防止分支大幅偏離主干。如果不是經常集成,主干又在不斷更新,會導致以后集成的難度變大,甚至難以集成。

  持續集成的目的,就是讓產品可以快速迭代,同時還能保持高質量。它的核心措施是,代碼集成到主干之前,必須通過自動化測試。只要有一個測試用例失敗,就不能集成。

  GitHub ActionsGitHub 的持續集成服務,於2018年10月推出,現在已經到了beta測試版本,預計將於今年的11月份正式發布。
  本文是一個簡單教程,演示如何使用 GitHub Actions 自動發布一個 npm 包。

實現步驟

1. 創建workflow模板

  點擊GitHub Actions頁面中的 Sign up 按鈕,即可獲取資格。進入你需要發布的github項目頁面,就會出現項目的Actions圖標。
進入Actions Tab頁:

有各種類型的workflow模板可供選擇。這里我們選擇Node.js Package 點擊 Set up this workflow
選擇默認配置文件:

github項目中即可生成下列文件
.github
 |- workflows
   |- npmpublish.yml .

2. 本地yml文件配置

  進入本地項目目錄拉取github最新代碼。編輯npmpublish.yml文件,下面是我的github項目lottie-iamge使用的配置文件。

name: Node.js Package

on:
  pull_request:
    branches:
      - master
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: actions/setup-node@v1
        with:
          node-version: 12
      - run: npm ci
      - run: npm test

  publish-npm:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: actions/setup-node@v1
        with:
          node-version: 12
          registry-url: https://registry.npmjs.org/
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{secrets.npm_token}}

對比可看出,除了publish-gpr外幾乎沒有任何修改。
.yml文件的主要結構如下:

name: workflow_name  
on:  
  pull_request:  
    branches:  
      - master  
  push:  
    branches:  
      - master 
jobs:
  job1:
  runs-on: platform
  steps: 
    - uses: action1
    - uses: action2
      with:
        KEY : VALUE
    - run: command1
    - run: command2
      env: 
        KEY: VALUE

  job2:
  needs: job1
  runs-on: platform
  steps: 
    - uses: action1
    - uses: action2
      with:
        KEY : VALUE
    - run: command1
    - run: command2
      env: 
        KEY: VALUE
  

下面解釋各部分的含義:

  • name 表示此工作流的名稱。
  • on 表示觸發條件,例如上述文本表示當master分支合並pr和推送時會觸發workflow。
  • jobs 工作集合,例如jobs內部的job1、job2表示具體的工作任務的ID可以自定義只要不沖突即可。
  • needs 表示當前的job依賴與另外一個job,例如上面的job2依賴於job1、publish-npm依賴於build。
  • runs-on 表示工作所在的虛擬機操作系統,目前可選的系統有ubuntu-latest、ubuntu-18.04、ubuntu-16.04、windows-latest、windows-2019、windows-2016、macOS-latest、macOS-10.14。
  • steps 表示job所執行的actions和commands集合。具體如何實現和自定義action今后會在專門的文章中講解。

  這樣整個workflow的結構就大致清楚了。
  下面我們回到 npmpublish.yml 文件,刪除掉整個publish-gpr job節點(gpr 是 GitHub Package Registry 的縮寫,目前該功能還在內測中,申請資格需要等待很長時間,這里直接略過),只保留build 與 publish-npm。

3. 配置.npmignore文件

  在本地項目的根目錄中添加.npmignore文件。
排除掉.github目錄和其他無關的目錄文件。
  例如,在我的項目中就排除了.github目錄和項目測試文件

test/  
.github/  
test.js

4. 添加 npm token

  打開npm account 頁面-> Tokens -> Creat New Token 將token復制粘貼下來並保存在本地(token在頁面關閉后將不再出現)。

  打開github項目頁面選擇 Settings -> Secrets -> add a new secret 。

名稱與配置文件的中的名稱保持一致。例如,項目中配置文件為

NODE_AUTH_TOKEN: ${{secrets.npm_token}}

這里的 Name 就填 npm_token 。

5. 配置 package.json 與 package-lock.json

  修改 package.json 與 package-lock.json 的版本號使其保持一致。若項目中沒有package-lock.json文件,可以在項目中執行 npm i 會自動生成該文件。

6. 提交推送

  提交推送本地項目至GitHub,打開項目的Actions頁面即可查看持續集成結果。

參考文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM