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
目前码云针对流水线的文档,企业版比较完善,社区版比较简陋,官方承诺说年后会细化。这里我仅针对该配置中重要的部分说明:
- 分支匹配部分,参考: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年前,现在的流水线,在制品库、发布(基于仓库的发包)功能有所完善,如果是私有仓库(企业版),还是有价值的。