gitlab结合semantic-release自动化发布npm插件(二)

news2024/11/13 21:24:56

前言

在内部组织架构开发npm包时,很多人会想到规范问题,难道按前文gitlab结合semantic-release自动化规范git流程(一)所描述根据git的CI/CD就可以了吗,每次发布都会版本对应的新增,而往往新增的版本不是我们所需要的,我们可能最起码的还需要进行单元测试、内部的功能测试、再到公测…才能作为一个稳定的版本去使用。那么具体该怎么做呢,今天就来讲述一下内部该怎么规范和执行一个npm发布?

一、开发流程

在内部开发时,可以以gitlab为参考标准,大体流程与开源流程接近,唯一的区别即开发者可以直接在其他分支进行开发,无需拉取额外的PR。

   1.1 技术需求评审/优化功能评审,插件设计的功能点是否有必要进行,功能点的markdown文档(属性、事件、案例),哪些核心功能点的单元测试 - 对标github的讨论区

   1.2 确定之后通知 上级  建立git,根据项目特性,创建完整的git CI工作流

   1.3 插件/组件核心功能要有合理的单元测试,比如通常保证script有test的命令可执行(npm run test)

   1.4 功能feat分支开发完毕,申请合并至alpha分支,人工review代码设计是否合理,单元测试是否合理达标

   1.5 确定完毕,同意合并至alpha分支并触发单元检测job,单元测试通过后会触发job2:自动化发布至alpha内测版

   1.6 内测版经过测试没有问题,将合并至beta分支,触发job2,自动化发布至beta版,进行公测

   1.7 公测无问题,将合并至master分支,触发job2,自动化发布至正式稳定版

二、npm命名规范

如果是单一的插件,或者组件库可直接小写英文以横岗进行拼接(如:element-ui),如果是关联性比较强的,类属于一个项目分类的子包,要以 @项目名称/子包名称的形式(如:@ests-sdk/wx、@ests-sdk/baidu)

三、 git CI/CD的流程

主分支流程: alpha-beta-master(alpha、beta、master均设置为保护分支,非管理员不可提交)

npm包发布流程

四、git CI/CD触发机制

添加gitlab.yml文件控制git自动化ci工作流,达到发布的目的。在对应分支会触发job1:单元检测、和job2:执行自动构建发布流,固定的commit提交格式才会触发job中的自动化发布(版本控制、tag、changelog等)。

五、git commit提交规范

提交一个bug修复,如git commit -m ‘fix: 修复了xxx’ 或者 git commit -m ‘fix(某个功能备注): 修复了xxx’
feat 功能feature的意思,也是最常用的。当你的功能有变更的时候,都可以采用这种类型的type ,版本变化v1.0.0—>v1.1.0

- fix当然指的是bug修复 版本变化v1.0.0--->v1.0.1 	
- docs 更新了文档,或者更新了注释 	
- style代码格式调整,比如执行了format、更改了tab显示等  版本变化v1.0.0--->v1.0.1 	
- refactor 重构代码。指的是代码结构的调整,比如使用了一些设计模式重新组织了代码 版本变v1.0.0--->v1.0.1
- perf对项目或者模块进行了性能优化。比如一些jvm的参数改动,把string buffer改为string builder等 版本变化v1.0.0--->v1.0.1 
- test 这个简单,就是增加了单元测试和自动化相关的代码
- build 影响编译的一些更改,比如更改了maven插件、增加了npm的过程等 	
- ci 持续集成方面的更改。现在有些build系统喜欢把ci功能使用yml描述。如有这种更改,建议使用ci
- chore 其他改动。比如一些注释修改或者文件清理。不影响src和test代码文

五、核心代码

.releaserc文件
注意:

  • 我们这里额外引用了@semantic-release/npm这个包,npmPublish即是执行发布,会帮助我们执行自动化的发布,pkgRoot为要发布的文件夹包,需要包含package等文件,同时大家也需要按照token或者用户账户密码的形式写入到git CI的临时变量中去,这个是重点。

    • 在这里插入图片描述
      在这里插入图片描述
  • branches中的nameprerelease则是会执行job的分支和是否发布

{
  "branches": ["+([0-9])?(.{+([0-9]),x}).x", "master", "next", "next-major", {"name": "beta", "prerelease": true}, {"name": "alpha", "prerelease": true}],
  "plugins": [
    ["@semantic-release/commit-analyzer",{
      "preset": "angular",
      "releaseRules": [
        {"type": "docs", "scope":"README", "release": "patch"},
        {"type": "refactor", "release": "patch"},
        {"type": "style", "release": "patch"}
      ],
      "parserOpts": {
        "noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES"]
      }
    }],
    "@semantic-release/release-notes-generator",
    ["@semantic-release/npm", {
      "npmPublish": true,
      "pkgRoot": "packages/ests-sdk-ali"
    }],
    "@semantic-release/changelog",
    [
      "@semantic-release/git",
      {
        "assets": [
          "package.json",
          "CHANGELOG.md"
        ],
        "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
      }
    ]
  ]
}

.gitlab-ci.yml 文件
共计4个job任务,test是执行单元测试的任务、alphaPublish自动化发布alpha版本、betaPublish自动化发布alpha版本、releasePublish自动化发布正式稳定版本

stages:
  - test
  - alphaPublish
  - betaPublish
  - releasePublish
test:
  stage: test
  image: node:lts
  script:
    - npm i
    - npm run test
    - npm run build
  only:
    - alpha
  tags:
    - runner-web
alphaPublish:
  stage: alphaPublish
  image: node:lts
  script:
    - npx --no-install semantic-release
  dependencies: [] 
  only:
    - alpha
  tags:
    - runner-web
betaPublish:
  stage: betaPublish
  image: node:lts
  script:
    - npm i
    - npm run build
    - npx --no-install semantic-release
  dependencies: []    
  only:
    - beta
  tags:
    - runner-web
releasePublish:
  stage: releasePublish
  image: node:lts
  script:
    - npm i
    - npm run build
    - npx --no-install semantic-release
  dependencies: []
  # 仅在中央仓库的分支发生提交时才触发 release 流程       
  only:
    - master
  tags:
    - runner-web

这里仅仅只使用于单个的包发布,或者通过代码构建把不同的包区分在了不同的文件夹中。可以通过执行多个npm,如:

 ["@semantic-release/npm", {
   "npmPublish": true,
   "pkgRoot": "packages/ests-sdk-ali"
 }],
 ["@semantic-release/npm", {
   "npmPublish": true,
   "pkgRoot": "packages/ests-sdk-baidu"
 }],
 ["@semantic-release/npm", {
   "npmPublish": true,
   "pkgRoot": "packages/ests-sdk-tt"
 }]

六、效果预览

在这里插入图片描述

在这里插入图片描述
问题:

npm ERR! code E404
npm ERR! 404 Not Found - PUT https://registry.npmjs.org/xxx%2fali - Not found
npm ERR! 404 
npm ERR! 404  '@ests-sdk/xx' is not in this registry.
npm ERR! 404 
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

通常在执行时会发现检测通过了,但是发布时报错404,这是因为在npm初始化时需要手动建立一个组织,这里是ests-sdk的一个组织,才能发布@ests-sdk/xxx的npm包

下一文,我们来讲述一下通过lerna来发布多包该如何执行自动化的规范。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何去掉视频上的水印文字?视频去水印方法大分享

我们在网上看到喜欢的视频,都会保存下来,经常能够看到保存下来的这些视频中都带有水印。这些带有水印的视频在后期的观看过程中,会很影响整个画面,所以我们在保存下来后,可以选择将视频中的水印去除。那么视频如何去水…

物料管理系统最基本的功能有哪些?

随着企业信息化的快速发展,传统企业的企业快速增长与管理水平、手段滞后之间的矛盾已成为影响企业发展的重要因素和阻碍企业战略目标实现的主要矛盾。尤其是对于一些传统的中小型制造企业企业而言,以往的信息化系统所做的相应规划已经完全不能适用于高速…

【论文阅读32】《Texture Defragmentation for Photo-Reconstructed 3D Models》

目录 1 introduction 2 overview 3 Related work 3.1 Single-patch Mesh Parametrization 3.2 Global Mesh Parametrization 3.3 Signal-Specialized UV Maps 3.4 Mesh repairing 3.5 Alleviating the effect of seams 3.6 Packing of texture charts 4 Phases of the algorith…

初阶数据结构学习记录——열넷 排序(3)

归并排序 归并的思路其实和二叉树,快排都有点像。归并希望左、右半区间有序。和快排不同,先分裂后排序,一半一半分,分到最后每个区间只剩一个1个数字,这个区间一定是有序的,因为只有一个数字,往…

kubernetes的基本使用

文章目录kubernetes的基本使用1、部署方式1、部署方式的演进图2、各部署方式的特点2、架构的简单说明1、架构简图2、各组件说明1、控制平面组件(Control Plane Components)1、kube-apiserver2、etcd3、kube-scheduler4、kube-controller-manager5、cloud…

Apache HTTPD 换行解析漏洞

漏洞介绍: Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。 影响版本:Apache 2.4.0~2.4.29 存在一个解析漏洞;在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策…

Windows中cmd命令窗口一些有用的小技巧命令

使用小功能记录 命令功能help显示所有dos命令,help >> cmd.txt,会把命令输出成文档altprtscreen快速截取命令行窗口esc清除当前命令行tab补全路径,若知道路径开头可快速补全,包含隐藏文件,但文件夹多又不知道路径开始字符时…

scrapy框架了解与使用

scrapy介绍与安装 Scrapy 是开源和协作的一个基于 Twisted 实现的异步处理爬虫框架使用纯 Python 语言编写,被誉为爬虫界的Django,Scrapy 框架应用广泛,常用于数据采集、网络监测,以及自动化测试等 Scrapy安装 mac、linux系统 …

【入门AI】利用Paddle实现简单的数字识别

梳理逻辑 整个流程 准备好Paddle的环境准备好训练样本设计模型(定义模型)训练模型模型测试 1、准备好环境 #加载飞桨和相关类库 import paddle from paddle.nn import Linear import paddle.nn.functional as F import os import numpy as np import matplotlib.pyplot as plt…

集美大学第14届蓝桥校选题解

本次比赛的出题表如下: 退役一年,勋总还是那么强呜呜呜 目录填空题[1] 十甚至九题意思路拓展[蓝桥杯] XXX 进制减法第十三届蓝桥杯C/C省赛B组 E题[2] 九大于十题意思路[3] N皇后签到题[1] JMU最强蓝人[2] 哪有赌狗一直输[3] 元胞自动机题意思路代码实…

PLC程序实例二:ModBusTCP客户端编程实例与测试方法

一、需求描述 1、设备作为服务端时,需要给出对应的测试方法,即要求 PLC 作为客户端,设备作为服务端,因此要求编写 PLC 的ModBusTCP客户端 2、先了解一下设备作为服务端的ModBusTCP网络触发业务逻辑 (1)设…

SQL 语法速成手册

基本概念 数据库术语 数据库(database):保存有组织的数据的容器(通常是一个文件或一组文件)。数据表(table) :某种特定类型数据的结构化清单。模式(schema)…

JAVA SCRIPT设计模式--创建型设计模式之抽象工厂(1)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能,所以不可能像C,JAVA等面向对象语言一样严谨,大部分程序都附上了JAVA SCRIPT代码,代码只是实现了设计模式的主体功能,不代…

这俩个技巧 解决了90%的冲突

解决冲突的关键技巧 关于本书作者: 达纳.卡斯帕森,冲突调节的专家,尚普兰大学人际冲突专业的硕士。三次获得芭蕾舞国际协会搬的最佳舞者奖。 关于本书: 这是一本引导别人如何化解一段冲突,达成一次有效沟通的社交类…

DataX 及 DataX-Web 安装使用详解

文章目录一、DataX安装1、解压datax.tar.gz2、运行自检脚本二、Datax-Web安装1、解压DataXWeb安装包2、执行一键安装脚本3、启动服务前段时间在项目上使用了阿里的离线数据同步工具datax,在大批量的表同步过程中踩了一些坑,所以详细介绍一下,…

五、伊森商城 前端基础-Vue Vue脚手架原理与使用 p27

目录 Vue项目结构 一、使用vue脚手架进行模块化开发 1、main文件 1.1、首先new Vue创建了一个vue实例,这个实例挂载了index.html中的app元素 1.2、使用了路由,这个路由是简写的写法 1.3、components使用了一个组件叫App 1.4、最终渲染 2、App.vu…

卷积神经网络相关模型

卷积神经网络相关模型1. CNN架构2. CNN架构模型2.1LeNet模型2.2Alexnet模型2.3VGG16模型2.3.1 使用多层小卷积核代替一层大的卷积核优点2.3.2 使用1*1卷积核优点2.3.2 模型特点卷积神经网络基本概念相关知识连接 卷积神经网络基本概念相关知识连接 1. CNN架构 模型分为2部分【…

ubuntu1804在rviz中显示kitti数据集的2D检测框和激光雷达的3D检测框

之前所做的工作参考上篇博客ubuntu1804发布kitti数据集的gps资料,imu资料(包含发布图片,点云过程)_FYY2LHH的博客-CSDN博客 本次将详解如何在ros播放的kitti数据集上作出检测框,首先需要知道的是对于kitti数据集中的每一帧都必须提前进行标注,而这个工作已经被别人完成了…

42. Python range函数—生成器函数

42. range函数—生成器函数 文章目录42. range函数—生成器函数1. 什么是range( )函数2. 回顾列表切片的语法3. range( )函数的语法3. range函数实操3.1 只有1个参数3.2 有2个参数3.3 有3个参数3.4 步长为负数4. list不能完全替代range5. 总结1. 什么是range( )函数 range[reɪ…

基于遗传算法在机器人路径规划中的应用研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…