1. 程式人生 > >Github 持續化整合 工作流 Npm包自動化釋出

Github 持續化整合 工作流 Npm包自動化釋出

Github 持續化整合 工作流 Npm包自動化釋出

簡介

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

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

  GitHub Actions 是 GitHub 的持續整合服務,於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頁面即可檢視持續整合結果。

參考文件

  • npm-developers
  • GitHub Actions 入門教程