新版碼雲社區版流水線(Gitee Go) npm publish 扼要介紹

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: build@nodejs
        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

目前碼雲針對流水線的文檔,企業版比較完善,社區版比較簡陋,官方承諾說年後會細化。這裏我僅針對該配置中重要的部分說明:

  1. 分支匹配部分,參考:https://help.gitee.com/gitee-go/pipeline/trigger
  2. git commit comment 內容的匹配,在 commitMessages 這個節點,必須使用正則表達式,而且必須是全文匹配,即:
    • ^build 只能匹配提交內容 build
    • ^build\:.* 只能匹配提交內容 build: xxxx
  3. variables 部分,是引用倉庫的變量,可以通過界面設定,但能配置解決的誰用 UI 呢?
  4. 推薦 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 來發布。

碼雲流水線現存的一些問題

  1. 社區版文檔太拉跨了,他們關注焦點在:如何向初級用戶介紹 Gitee Go 這個產品,卻沒考慮資深用戶羣體,能用配置解決的,誰樂意用 UI?
  2. nodeVersion 的問題,假如你項目使用了最新版的 rollup ,如 rollup^3 的話,目前的 nodeVersion 無法跨越 14.18 這道坎(不支持 require('node:process'))。只能回退到 [email protected],只能等待碼雲更新 node 版本號。
  3. commitMessages 的正則匹配,有點過於僵硬(個人觀感,可以忽略)。
  4. 倉庫發包不支持讀取文件識別版本號,只能靠自己遞增版本號。

對比2年前,現在的流水線,在製品庫、發佈(基於倉庫的發包)功能有所完善,如果是私有倉庫(企業版),還是有價值的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章