语义版本控制自动化

Posted

技术标签:

【中文标题】语义版本控制自动化【英文标题】:Semantic versioning automation 【发布时间】:2016-04-14 19:21:48 【问题描述】:

在我阅读了this article 和另一个之后,我发现版本控制是程序员的决定,所以我相信 CI 系统无法理解这个包的版本(CI 系统无法理解拉取的提交是否是一个补丁,一个新功能)。

但是,程序员不知道如何将补丁(错误、功能等)链接到版本号标识

根据语义版本:

仅在发布错误修复等时增加补丁版本(例如从 2.3.4 到 2.3.5) 添加新功能时增加次要版本(例如,从 1.3.2 到 1.4.0) 在引入重大更改时增加主要版本(例如从 3.2.9 到 4.0.0)

我的语义版本将遵循下一个模式:1.2.3+7489ab44d3,其中 1 是主要版本号,2 是次要版本号,3 是补丁或错误号。那么+7489ab44d3将是CI系统上构建的工作标识。

所以,这种模式的第一部分依赖于人脑,最后一部分在 CI 系统下。

我也读过,可以使用问题跟踪系统来根据某种信息整理每个问题并将其提供给 CI 系统。

提供自动化以实现这一目标的最佳方式是什么?

【问题讨论】:

【参考方案1】:

我们正在使用插件来做到这一点。

https://wiki.jenkins-ci.org/display/JENKINS/Version+Number+Plugin

我们根据分支名称知道版本是什么,并根据它生成适当的内部版本号。

它是构建过程中的一项单独任务,您可以使用多个系统和插件来实现它。

【讨论】:

据我所知,这个插件对于根据提供的几个格式字符串为您的构建提供版本号很有用。但是,此插件不知道如何从 2.4.x 更改为 2.5.x,因为 CI (Jenkins) 不知道拉取的提交是否解决了错误或提供了新功能。在 .Net 项目中,用版本号标记程序集很重要,这个插件如何在构建文件之前更改文件 (AssemblyInfo.cs) 的内容?或者如何更改许可证文件的版本内容?此更改是程序员的决定,恕我直言。 你是对的。为此,我们使用脚本将参数传递给构建以“更改”“主要”版本 您使用的是哪种脚本?何时何地执行? 为此目的,我们有一个特殊的软件在我们的 Jenkins 构建步骤中调用。 作为“特殊软件”是指定制软件吗?如果是这样,你能给我解释一下它在做什么吗?

以上是关于语义版本控制自动化的主要内容,如果未能解决你的问题,请参考以下文章

如何根据语义版本控制自动增加 Web 应用程序版本?

sh travis-ci或任何其他ci的自动语义版本控制

在 Gradle 中对依赖项使用语义版本控制

语义版本控制在啥版本下进行版本化?

发布后版本控制和 SemVer 2.0(语义版本控制)

CI 如何影响语义版本控制?