摘要:本文引入两个工具commitizen和standard-version来实现语义化版本与变更日志的自动化,提升规范化程度,减少人工干预。

随着DevOps方法与实践的普及,越来越多的企业开始使用持续部署流水线来提升软件持续交付的效率与质量。然而,我们发现在发布计划中,我们通常会面临如何为软件版本打标签以及如何准备发布变更日志等方面的挑战。在版本发布过程中,不少企业仍会在手动为软件版本打标签,准备发布变更日志等方面会进行大量繁琐、重复的工作,投入了很大的人力成本,而且无法集成到持续交付流水线的自动化流程中。

本文引入两个工具commitizen和standard-version来实现语义化版本与变更日志的自动化,提升规范化程度,减少人工干预产生的问题。

1、规范代码提交说明

为了使代码提交说明更有意义,同时也可以让团队其他成员更轻松地了解代码变更的原因、目的与影响范围,因此在团队中对代码提交说明进行轻量级约定显得非常有必要。所谓git commit message规范即通过提交说明中的特定关键字来描述代码变更的范畴等,例如特性新增、缺陷修复、文档变更等。

为此,我们选择Conventional Commits作为人与机器之间协同工作的规范,为自动化软件版本奠定基础。Conventional Commits是许多NPM包使用的非常常见的规范。该规范提供了一组简单的规则来创建显式提交历史。该规范在提交说明中描述了features、fixes等,与SemVer相匹配。

提交说明的结构如下所示,详情请参考链接Conventional Commints:

<type>[optional scope]: <description>
[optional body]
[optional footer(s)]

为了在团队中落实代码提交说明规范,不可避免地需要成熟的工具来支持。目前,在自动约束提交信息这方面已经有很多成熟的工具了,python语言工具,PHP语言工具,以及本文介绍的基于Node.js语言的工具——commitizen,开发者可以直接将它安装在自己的工作机中,在代码提交时直接使用。此外,对于一些流行的IDE,有许多提交兼容插件,比如VSCode和visual studio。在安装commitizen后,并在代码仓库中安装changelog适配模块后,就可以使用git cz命令来代替git commit,进行代码提交说明的规范化提交。

2、标准化版本号与变更日志

为了标准化版本号,大家可以先了解一下SemVer,主要规定了版本号如何表示,如何增加,如何进行比较,不同的版本号意味着什么。我们通过commitizen工具已经实现了代码提交说明的规范化,接下来我们使用standard-version完成如下工作:

• 检索代码仓库当前的版本;

• 根据规范化的提交信息更改版本;

• 根据规范化的提交信息生成变更日志;

• 创建一个新的提交,包含新版本和更新了的变更日志;

• 用这个新版本号创建一个tag标签。

开发团队对阶段性开发进行第一次发布

较小的功能修复引起的小版本+1(1.0.0->1.0.1)发布

3、在华为云DevCloud上发布版本

当开发者在本地完成代码开发后,可以使用commitizen与stardard-version规范化代码提交说明,并形成changelog与版本号,然后将代码推送至DevCloud的代码仓库中,触发DevCloud流水线,完成软件发布。

3.1 配置流水线

首先,配置DevCloud流水线的触发器,使代码提交自动触发流水线运行。

然后使用系统参数GIT_COMMIT将CommitID作为发布仓库路径。

3.2 本地代码推送到云端代码仓库

3.3 查看代码提交历史

3.4 查看发布仓库

每次代码提交后,触发流水线中的构建任务,生成软件包,自动归档在DevCloud发布仓库中。在发布仓库中,可以代码提交所对应的发布仓中的软件包。

图 代码仓库提交历史

图 软件发布库

至此,我们利用commitizen与standard-version工具实现了语义化版本与变更日志的自动化,在一定程度上提升了软件发布的效率。然而深入思考,我们会发现standard-version的工作仍然存在手工操作。我们也探讨了利用华为云DevCloud流水线将此工作进一步自动化的可行性。遗憾的是,目前华为云DevCloud不支持向用户代码库提交变更的能力。我们希望华为云DevCloud可以进一步评估向用户代码库提交变更的能力。那么在当前限制下,是不是就没有可能自动化了呢?路是存在的,只是有点复杂,感兴趣的开发者,可以参考博文“如何在华为云DevCloud流水线中运行OWASP ZAP安全测试”。

点击关注,第一时间了解华为云新鲜技术~

如何在软件发布计划中自动化语义化版本与变更日志相关推荐

  1. Go (Golang) 工具之自动化版本工具 gsemver | semver 语义化版本规范

    文章目录 Go (Golang) 工具之gsemver 什么是gsemver 动机 感谢 gsemver 安装 gsemver 使用 准备 git HEAD 基础 CLI 配置文件 语义化版本 2.0 ...

  2. 软件版本阶段与语义化版本(SemVer)

    文章目录 软件版本阶段 语义化版本 FAQ npm中package.json文件依赖项版本号 参考 软件版本阶段 Alpha版:预览版或内部测试版,一般不向外部发布,会有很多 bug. Beta版:公 ...

  3. 有关WEB前端中的语义化

    作天在变卖大学书籍时也不晓得怎么的就想起语义化这个概念,于是乎也就花点时间搞搞它.语义化标记对于刚学web前端脚本语言的童鞋来说往往都没太 在意,哇哈哈,其实我也就算只比较老的菜鸟而已,本文不是说教, ...

  4. 【转】语义化版本 2.0.0

    转自:语义化版本 2.0.0 | Semantic Versioning 语义化版本 2.0.0 摘要 版本格式:主版本号.次版本号.修订号,版本号递增规则如下: 主版本号:当你做了不兼容的 API ...

  5. Symbian软件发布计划及更新(组图)

    当前所有模块的软件开发团队正在致力于Symbian平台的工作中,将他们的模块发布到平台版本当中.Symbian平台的发布计划是:每年将有两次软件平台版本发布.下图将为我们展望明后年的计划. Symbi ...

  6. HTML中的语义化标签

    一.什么是语义化标签 语义化标签可以理解为用于进行网页页面构建的标签,他们不会影响页面内容,只是对页面结构的规范话. 二.为什么使用语义化标签 易修改.维护 更易理解页面结构 有利于SEO搜索引擎检索 ...

  7. 聊聊 npm 的语义化版本(Semver)

    前言 现在我们要开发一个项目,我们都知道为了方便项目管理,要写一个版本号,那开发的时候初始的版本号是多少呢?是 1.0.0 还是 0.0.1 开始? 如果一个版本号为 X.Y.Z,什么时候是 X 应该 ...

  8. php 语义解析,[扩展推荐] PHP 语义化版本(SemVer)辅助库

    SemVer 是由 Chris Kankiewicz 开发的一个语义化的提取版本号中各种信息的 PHP 辅助库.支持解析.递增和比较等特性. 下面是初始化 SemVer\Version 对象的基本用法 ...

  9. 语义化版本控制模块-Semver

    执行某些命令的时候,你是否遇到过提醒版本过低,需要升级版本的提示,那么对于版本号,是以一个怎样的规则来进行的限制和匹配的呢? semver, 是一个语义化版本号管理的模块,可以实现版本号的解析和比较, ...

最新文章

  1. 苏大微型计算机原理与应用题库,苏大单片机原理及应用试卷
  2. 苹果开源Swift底层非阻塞I/O框架SwiftNIO
  3. JavaScript的几个概念简单理解(深入解释见You Don't know JavaScript这本书)
  4. 微软嵌入式WEC2013产品研讨会(深圳站---2013.10.16)
  5. 1027:输出浮点数
  6. 在php里面怎么做日期范围,如何在php中获得上周的日期范围?
  7. java trie实现
  8. 调焦后焦实现不同距离成像_如何用手机拍出单反的效果,系列学习(一)AF参数“自动调焦”...
  9. ActiveBpel部署运行BPEL流程实例
  10. lcfirst_PHP lcfirst()函数与示例
  11. nginx lua获取客户端ip
  12. hdu 4970 树状数组 “改段求段”
  13. 【房价预测】基于matlab GUI BP神经网络房价预测【含Matlab源码 972期】
  14. C#可视化编程技术总结:制作可视化窗体软件
  15. 微信小程序列表切换样式简单案例
  16. php中判断一个文件是否存在,PHP中用于判断文件是否存在的函数是
  17. Cisco命令合集-1
  18. 浏览器关闭垃圾的百度热点推荐------简洁就是美
  19. reactJS 干货(reactjs 史上最详细的解析干货)
  20. 2020-01-16

热门文章

  1. Bootstrap 按钮的尺寸
  2. Bootstrap 滚动监听插件Scrollspy 的事件
  3. ios 原生android系统下载地址,Android/iOS已有原生项目集成ReactNative
  4. java快速压缩文件夹_如何使用java压缩文件夹本身
  5. pytorch查看loss曲线_pytorch loss总结与测试
  6. anaconda 安装在c盘_Tensorflow 2.1安装
  7. Python图像处理库PIL的ImageStat模块介绍
  8. Android商城开发系列(一)——开篇
  9. Java Gradle入门指南之依赖管理(添加依赖、仓库、版本冲突)
  10. 分享12款非常漂亮的免费国外网站模板