新版码云社区版流水线(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年前,现在的流水线,在制品库、发布(基于仓库的发包)功能有所完善,如果是私有仓库(企业版),还是有价值的。

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