语义版本控制和持续部署

墨菲在一个小时前踢了我的$。

语境:

我最近join了一个新的雇主,产品在依赖方面相当落后, Angular 1.2.xAngular-UI 0.12.0等等。

这是我工作过的第一个雇主,每天都在做生产等等。(以前我只在一个叫做大公司的公司工作,慢慢转身)。我最初的任务之一是升级依赖项,能够。 因此,今天早些时候,我们和一些开发者进行了一场关于为什么我们所有的bower依赖关系都被硬编码为特定版本的水冷谈话。

这两个思想stream派是:

  • 硬编码版本显然提供了100%的安全性,因为版本不能dynamic跳转,但是缺点是如果有人不主动更新,我们会再次落后。
  • 我认为,语义版本化给了我们某种forms的安全性(加上有多个分段环境),并且它应该足够好,比如说Angular设置为^1.5.9

从语义版本文档引用:

次要版本Y(xYz | x> 0)必须增加,如果新的,向后兼容的function引入到公共API。 如果任何公共APIfunction被标记为不赞成,它必须增加。 如果在私有代码中引入了实质性的新function或改进,它可能会增加。 它可能包含修补程序级别的更改。 小版本增加时,补丁版本必须重置为0。

问题:

今天早上我们部署到了舞台,一切似乎都很顺利,然后我们在一个小时前部署到了产品上,

问题是AngularJs从1.5.9变为1.6.0 。 我在迁移文档( migrate 1.5 – > 1.6 )中看到这样的说法:

您可能还会注意到,此版本附带了一个比平常更长的更改列表。 不要让这些让你灰心,因为其中大部分都很小 – 往往不会影响实际应用。 这些突破性的变化是必要的,以便:

题:

我的断开连接在哪里? …或者是语义版本的文档只是我一直以来的虚假安全感?

处理这些情况的人们如何呢? 在现实世界的解决scheme中,人们是否利用汽车依赖性升级(对不起,如果这对某些人来说是非常明显的),对于我来说,构build通过升级并打破生产的事实实际上更关心。

(我问的原因是因为对小增量更新的恐惧现在回来了,比以往任何时候都强,而且我不确定是否同意这一切……)

看起来非常简单,如果他们做出突破性的改变,他们应该把它撞到2.0.0。 他们没有进行语义版本控制。 不是所有使用XYZ风格版本的项目都在进行语义版本控制。

尝试在自己的testing和临时环境中以自动化的方式了解这个过程是如何“繁荣”的。 不要害怕前进,必须在某个时候完成,而且我宁愿更频繁地逐步移动,而不是像一个完全手动的过程那样突然向上移动许多版本。