Github 持續化整合 工作流 Npm包自動化釋出
Github 持續化整合 工作流 Npm包自動化釋出
簡介
持續整合指的是,頻繁地(一天多次)將程式碼整合到主幹。
它的好處主要有兩個:
1. 快速發現錯誤。每完成一點更新,就整合到主幹,可以快速發現錯誤,定位錯誤也比較容易。
2. 防止分支大幅偏離主幹。如果不是經常整合,主幹又在不斷更新,會導致以後整合的難度變大,甚至難以整合。
持續整合的目的,就是讓產品可以快速迭代,同時還能保持高質量。它的核心措施是,程式碼整合到主幹之前,必須通過自動化測試。只要有一個測試用例失敗,就不能整合。
GitHub Actions 是 GitHub 的持續整合服務,於2018年10月推出,現在已經到了beta測試版本,預計將於今年的11月份正式釋出。
實現步驟
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 入門教程