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頁面即可查看持續集成結果。