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

How to auto increment web application version in accordance with semantic versioning?

我们将遵循 Semantic Versioning for our web applications, it looks really nice. Now, Jenkins used as CI/CD tools. We want to use Octopus Deploy 作为工件存储和 CD 工具,以及快速 redeployment/rollbacks 和其他配置功能。

Octopus 需要具体版本的软件包(例如:1.2.4)。因此,我们还需要为我们的 Web 应用程序进行强版本控制。否则,如何检测部署的版本和有错误。

描述的解决方案 here 不透明且与语义版本控制不完全匹配:

[assembly: AssemblyVersion("1.0.*")]

因为,补丁版本应该从0开始逐一递增,而不是从"random"数字递增,并在Minor[=34之后重置=]增量。

我认为 - 最好将版本存储在存储库中与包中相同的视图 (1.2.4) 中。但我只找到了如何实现它的方法:

  • 提交前手动递增 - 令人不安且存在风险。
  • 提交前从 SVN/Git 挂钩自动递增 - 需要配置每个工作站。
  • 从 CI 工具自动递增并提交 - 通过 CI 监视存储库中的更改进行循环依赖。

是否有任何其他方法可以像在存储库中一样在 Web 应用程序包中实现相同的版本控制?或者也许这是不必要的?

更新 2017-02-28: 我们发现 Jenkins 可以跳过特定用户或特定消息的提交(在高级设置中)。它解决了 CI 工具和提交的自动增量问题(CI 监视和存储库更改之间的循环依赖)。

大多数开发人员未能在代码中提交正确的程序集版本。假设您有 40 个项目和 15 个开发人员,那么维护 [assembly: AssemblyVersion("1.0.*")] 版本将始终是一个问题。

我建议您可以检查代码并执行 搜索和替换 以始终注入正确的程序集内部版本号,例如 [Major.Minor.Build]。 [Major.Minor] 被作为输入并全局感知团队从而减少错误的 dll 编号/内部版本号可以正向递增并与 CI 的编号匹配以进行跟踪。 SVN提交号也可以混用。