为什么需要联调测试Staging环境呢?需要将不同模块之间集成在一起,在一个类生产的环境中进行测试。最终才是部署到生产环境中,将所有人分开做的工作才算真正的合在了一起。
持续集成解决的问题
持续集成就是制定一系列流程,或者一个系列规则,将需要在一起的各个层次规范起来,方便大家在一起,强迫大家在一起。
三、持续集成,持续交付,持续部署,敏捷开发,DevOps都啥关系?
这些概念都容易混淆,他们之间是什么关系呢?
持续集成,持续交付,持续部署,敏捷开发,DevOps的关系
敏捷开发Agile是一种开发流程,是一种快速迭代的开发流程,每个开发流程非常短,长到一个月,短到两个星期,就会是一个周期,在这个周期中,每天都要开会同步,每天都要集成。正是因为周期短,才需要持续的做这件事情,如果一个开发周期长达几个月,则不需要持续的集成,最后留几个星期的集成时间一起做也是可以的,但是这样就不能达到互联网公司的快速迭代,也是我们常常看到传统公司的做法。
持续集成往往指对代码的提交,构建,测试的过程,也就是上述的在一起的过程。
持续交付是指将集成好的交付物,例如war,jar,或者容器镜像,部署在联调环境,或者预发环境的过程。
持续部署是指将交付物持续部署在生产环境的过程。
我们常说CICD,CD有时候指的是Delivery交付,有的是指Deployment部署,对于非生产环境,自动部署是没有问题的,对于生产环境,往往还是需要有专人来进行更为严肃的部署过程,不会完全的自动化。
接下来就是DevOps,DevOps不只是CICD,除了技术和流程,还包含文化。例如容器化带来的一个巨大的转变是,原来只有运维关心环境的部署,无论是测试环境,还是生产环境,都是运维搞定的,而容器化之后,需要开发自己写Dockerfile,自己关心环境的部署。因为微服务之后,模块太多了,让少数的运维能够很好的管理所有的服务,压力大,易出错,然而开发往往分成很多的团队,每个模块自己关心自己的部署,则不易出错,这就需要运维一部分的工作让研发来做,需要研发和运维的打通,如果公司没有这个文化,研发的老大说我们不写Dockerfile,则DevOps是搞不定的。
四、从一个持续集成的日常,看上述的几个概念如何实践持续集成的流程
这是一个持续集成的流程,但是运行起来更加的复杂。
首先,项目开发的流程使用的是Agile,用常见的Scrum为例子。
Scrum
每天早上第一件事情,就是开站会standup meeting,为什么要站着呢?因为时间不能太长,微服务的一个模块,大概需要5-9人的团队规模,如果团队规模太大了,说明服务应该进行拆分了,这个团队规模,是能够保证比较短的时间之内过完昨天的状态的。
一定要大家一起开,而不要线下去更新Jira,虽然看起来一样,但是执行起来完全不一样。只有大家一起开,一起看燃尽图,一起说我昨天做了什么,今天打算做什么,有什么阻碍,才能够让大家都了解情况,不要期望大家会去看别人的Jira,经验告诉你,不会的。
而且这个站会对于开发是比较大的压力,例如你的一个功能block了依赖方的开发,在会议上会暴露出来,大家都知道这件事情了,一天block,两天block,第三天你都不好意思去说了,这会强迫你将大任务,比如原来写1周干一件什么事情,写成小时级别,这样每天你都有的说,昨天完成了一个task,而不是周只在那里说干同样一件事情,而且一旦有了block,team lead会知道这件事情,会帮你赶紧解决这个事情,推进整个项目的进展。让一个技术人员在团队面前承认这件事情我尝试了几天,的确搞不定了,也是一种压力。
站会中的内容其实在前一天晚上就要开始准备了。