1.2.1 Vagrant在DevOps中的开发状态

正如前面所述,DevOps是软件开发、运维,系统管理、测试,以及质量保障的混合体。DevOps不是一个新生事物,但是它并不一定有一个“领导者”或者一套规则和标准可以遵循。每家公司都对DevOps是什么,以及如何实施DevOps有自己的想法。由于DevOps缺乏治理,大多数人遵循非常类似的路径或粗略的准则,因此目前的发展状况参差不齐。

传统的工作流中,开发人员始终与运维和服务人员是分开的,但是在过去几年中,我们已经看到许多DevOps工具弥补了这一缺陷,这使双方的工作和生活更加轻松。

在过去,当Web开发人员构建Web应用程序时,他们会先写代码,在本地构建机器,然后将文件通过FTP传输到实时(生产)环境的服务器上,让代码运行起来。如果有任何问题或者Bug产生,开发人员必须对服务器环境进行变更并调试代码。有许多开发人员仍在使用此工作流,这可能是因为他们的环境使他们在此问题上别无选择。

今天,现代Web开发人员的工作流可能如下所示。

① 开发人员在本地编写代码,但是是通过虚拟环境或机器使用Vagrant等工具来编写的。这允许开发人员直接设置与实际生产相同的环境。

② 开发人员编辑其代码并使用版本控制(如Git或Subversion)来管理代码的更改。版本控制的设置方式允许开发人员将测试或新的代码与生产环境使用的代码分开。

持续集成(Continuous Integration,CI)工具(例如Jenkins或Travis CI)用于创建通常具有3个独立阶段(开发、预发布和生产)的管道。CI工具可以用来对软件的运行进行测试,还可以运行脚本,例如通过命令组合和压缩准备物料。版本管理软件可以和CI工具联动,一般是通过前者触发构建和测试。当开发人员推送了新的代码到预发布环境,测试会在代码发布到生产环境之前先运行一遍。

④ 通常情况下,如果测试没有问题,代码会被直接推送到版本管理仓库的生产分支。这时,CI工具可能会触发一个新的构建,这将触发和代码有关的服务更新与重启。这步可能很简单,也可能很复杂,具体取决于生产环境的软件架构。

⑤ 在这个过程中的某个阶段,质量保证/测试(Quality Assurance/Testing,QA)团队或者希望在代码投入生产之前审查代码的高级开发人员可能会进行人工干预。

当然,这只是一个工作流示例,在不同的公司和开发人员之间会有差异。现代的工作流可能看起来更复杂和乏味,但这是一个很好的衡量指标。您会注意到,在每个阶段,在真实用户与在线的生产环境代码进行交互之前,总是有很多的检查和测试。在开发财务或者其他与关键业务相关的软件时,这一点尤为重要。这种现代化的工作流大大减少了错误出现的概率。

DevOps的现代化发展专注于速度和自动化。专注于速度让快速构建特性或者修复Bug,以及“将代码推送到生产”(您可能听过这句话)成为一种能力。这意味着单个开发人员或者单个团队的开发人员遇到的障碍更少,开发人员不用担心如何配置服务器和环境。

自动化是DevOps的重要组成部分,它也会影响开发的部分。您可以想象一下,如果一个开发人员改动了代码,然后必须等待运维团队的成员针对改动手动执行测试脚本后才能知道结果,那么流程会有多慢。