语义版本控制和持续部署

Posted

技术标签:

【中文标题】语义版本控制和持续部署【英文标题】:Semantic Versioning & Continuous Deployment 【发布时间】:2017-04-23 22:30:51 【问题描述】:

大约一个小时前,墨菲踢了我的 a$$。

上下文:

我最近加入了一个新雇主,该产品在依赖关系方面已经过时了,Angular 1.2.xAngular-UI 0.12.0 等...

这是我工作过的第一个负责日常构建以生产产品等的雇主。(以前我只在所谓的大公司工作过,周转速度要慢得多)我最初的部分任务是升级我可以的依赖项。因此,今天早上早些时候,我们与一些开发人员进行了一次水冷式谈话,讨论了为什么我们所有的凉亭依赖项都被硬编码为特定版本。

两种思想流派是:

硬编码版本显然提供了 100% 的安全性,因为版本不能动态跳转,但缺点是如果有人不主动更新,我们将再次落后。 我认为语义版本控制为我们提供了某种形式的安全性(再加上具有多个暂存环境),并且应该足以让 Angular 设置为^1.5.9

引自语义版本文档:

次要版本 Y (x.Y.z | x > 0) 如果是新版本,则必须递增,向后 公共 API 中引入了兼容的功能。一定是 如果任何公共 API 功能被标记为已弃用,则递增。 如果有实质性的新功能或改进,它可能会增加 在私有代码中引入。它可能包括补丁级别 变化。当次要版本为 0 时,补丁版本必须重置为 0 递增。

问题:

今天早上早些时候,我们部署到暂存区,一切看起来都很好,然后我们在一个小时左右前部署到生产环境中...... BOOM

问题是 AngularJs 从 1.5.9 更改为 1.6.0。我在迁移文档 (migrate 1.5 -> 1.6) 中看到了这一点:

您可能还会注意到,此版本的版本比平时更长 重大更改列表。不要让这让你灰心丧气,因为 它们中的大多数都是很小的——通常不会影响真实的 应用程序。这些重大更改是必要的,以便:

问题:

我的断开连接在哪里? ...或者语义版本文档只是我一直以来的一种错误的安全感?

人们如何处理这些情况?人们是否在任何现实世界的解决方案中使用自动依赖升级(如果这对某些人来说非常明显,请原谅),就我而言,构建通过暂存并在生产中中断的事实实际上更令人担忧。

(我之所以这么问是因为对小幅增量更新的恐惧现在又回来了,而且比以往任何时候都更加强烈,我不确定我是否同意这一切的情绪......) em>

【问题讨论】:

在版本 2 之前,Angular 不遵循语义版本控制。见angularjs.blogspot.co.za/2016/10/…。 @Brett... 我想我必须再次从中学习,假设是所有问题的根源。 :// 【参考方案1】:

看起来很简单,如果他们做出重大更改,他们应该将其提升到 2.0.0。他们没有进行语义版本控制。并非所有项目都使用 X.Y.Z。样式版本正在进行语义版本控制。

尝试在您的测试和暂存环境中以自动化的方式了解它是如何“蓬勃发展”的。不要害怕前进,它必须在某个时候完成,我宁愿更频繁地一步一步地移动,而不是像完全手动的过程那样突然升级许多版本。

【讨论】:

除此之外,不要在生产部署期间进行自动包升级。您总是希望完全部署经过测试的内容。如果我误解了您的情况并且您确实部署了测试的内容,那么您需要更好的测试。

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

Jenkins、Maven 和语义版本控制:如何增加主要或次要版本

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

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

持续集成基本概念

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

语义版本控制问题和 npm 5 或更高版本