2年前寫過一篇 使用碼雲 gitee-go 做 npm publish ,但已經不適用了,流水線版本也迭代了N次了。
該文針對流水線功能的時間節點 2023年1月19日。
關聯的測試倉庫,可參考:gitee-workflow-test,已開放訪問,及 gitee-workflow-test in npm。
Step.1 社區倉庫開啓流水線功能
這個操作會在你的代碼根目錄添加一個 .workflow
目錄,默認會添加三個流水線配置文件:
master-pipeline.yml
針對主分支的推送流水線pr-pipeline.yml
針對 Pull Request 流水線branches-pipeline.yml
針對分支推送的流水線
可根據自己需要刪除不必要的流水線配置文件,本文例子保留 master-pipeline.yml
,以下配置也以此文件展開。
Step.2 獲取 NPM Token,配置倉庫變量
NPM Token
在 npmjs.com 生成你賬號的 access token:
現在新增了 Granular Access Token 可以針對 packages 和 組織(@xxx 的包名前綴就是組織)來分配權限,比較精準,但就是授權的時間太短了。
添加倉庫變量
以上截圖爲倉庫變量,TEST_VAR 保存的就是 NPM Token 的值。
在每個流水線,都可以去配置流水線對應環境變量,注意,流水線變量如果要使用倉庫變量,需要設置引用倉庫變量(這裏就不放截圖了,因爲下面的 yml 的配置會聲明)。
Step.3 修改 yml 配置
修改 .workflow/master-pipeline.yml
文件,修改內容如下:
version: '1.0'
name: master-pipeline
displayName: MasterPipeline
triggers:
trigger: auto
push:
# 分支匹配
branches:
include:
- master
# git 提交信息匹配,匹配 build: xxxx 這樣的格式
commitMessages:
include:
- '^build\:.*'
# 引用倉庫變量
variables:
global:
- TEST_VAR
stages:
- name: compile
displayName: 編譯
strategy: naturally
trigger: auto
steps:
- step: [email protected]
name: build_nodejs
displayName: Nodejs 構建
nodeVersion: 14.16.0
# 流水新構建執行命令
commands:
- npm install pnpm -g
- pnpm install && rm -rf ./dist && pnpm build
- npm install -g @jsdevtools/npm-publish
- test -f ./dist/index.js && npm-publish --token=${TEST_VAR} ./package.json
目前碼雲針對流水線的文檔,企業版比較完善,社區版比較簡陋,官方承諾說年後會細化。這裏我僅針對該配置中重要的部分說明:
- 分支匹配部分,參考:https://help.gitee.com/gitee-go/pipeline/trigger
- git commit comment 內容的匹配,在
commitMessages
這個節點,必須使用正則表達式,而且必須是全文匹配,即:^build
只能匹配提交內容build
^build\:.*
只能匹配提交內容build: xxxx
variables
部分,是引用倉庫的變量,可以通過界面設定,但能配置解決的誰用 UI 呢?- 推薦
nodeVersion
使用14.16.0
,曾經的 LTS ,目前這個版本不是最新的 stage(所有版本都有同樣的問題),下文會細說。
根據上述配置,只要 git commit 的內容匹配時,如 build: test xxxx
就會觸發流水線執行。
個人關係,習慣了用 pnpm,請根據自己項目的環境進行配置。
使用 NPM Token publish
目前要直觀的使用 NPM Token 進行 publish,需要額外安裝 @jsdevtools/npm-publish
,使用 npm-publish --token=${TEST_VAR} ./package.json
來發布。
碼雲流水線現存的一些問題
- 社區版文檔太拉跨了,他們關注焦點在:如何向初級用戶介紹 Gitee Go 這個產品,卻沒考慮資深用戶羣體,能用配置解決的,誰樂意用 UI?
nodeVersion
的問題,假如你項目使用了最新版的 rollup ,如rollup^3
的話,目前的nodeVersion
無法跨越14.18
這道坎(不支持require('node:process')
)。只能回退到[email protected]
,只能等待碼雲更新 node 版本號。commitMessages
的正則匹配,有點過於僵硬(個人觀感,可以忽略)。- 倉庫發包不支持讀取文件識別版本號,只能靠自己遞增版本號。
對比2年前,現在的流水線,在製品庫、發佈(基於倉庫的發包)功能有所完善,如果是私有倉庫(企業版),還是有價值的。