维基百科对这些术语中的大多数都给出了很好的总结。这是我对它们的看法:
生成自动化是自动构建软件,而不是手动调用编译器。这可以通过诸如Make或Ant之类的工具来完成。
部署自动化是采用您构建的软件并将其部署或安装在测试或生产系统上。
持续集成意味着在开发人员检入代码并运行单元测试以确保代码仍能正常工作时,具有自动化流程来持续构建软件。例如,服务器可能每隔15至30分钟醒来一次,扫描VCS以查找新的签入,然后进行更新并构建项目(如果进行了任何更改)。除了执行编译步骤外,这也是运行自动化单元测试和代码质量检查的绝佳机会。
持续交付是所有先前概念的结合,在该概念中,还将软件构建也部署到测试系统,并且可以选择执行测试和生成报告。
至少,您需要具有构建自动化,即某种构建脚本。这使您可以单击一个按钮或发出一个命令来构建项目。这样做的好处是减少了手动运行步骤中的错误。复杂的构建环境可能涉及生成代码(从配置中考虑DAO,接口代码(例如JAXB),编译代码,将其打包,自定义元数据等)。有很多工作要做,您需要一个清单:为什么不将清单做成您的构建脚本,并使用工具来运行它?它减少错误并提供一致性。
接下来是CI:这确实很不错,但并非严格要求。它有助于尽早发现构建问题。如果您有多位开发人员在一整天中检入代码,并且可能没有持续同步他们自己的工作区,则存在他们的更改相互干扰的风险。我指的是静态代码错误,而不是版本控制冲突。CI构建服务器将减轻这种风险。
最后,我们有部署步骤。这里的想法是为了节省时间并减少手动部署软件带来的错误。与构建自动化非常相似,有一百种方法可以破坏软件部署。我个人在办公室待到很晚,以解决许多手动部署问题,这在我们需要为明天到现场的客户提供功能正常的系统时。自动化多个系统会带来更大的风险:现在,我们有多个系统,而不是一个系统可能崩溃或出现奇怪的错误,系统可能会出错。但是,与那些错过检查清单上的步骤或发出错误的命令并弄乱部署的人相比,这种风险要低得多。如果幸运的话,您可以简单地还原数据库备份并重新开始,如果不幸的话,错误可能会导致系统无法正常运行。它是软件缺陷吗?技术人员是否未正确设置配置?如果您使过程自动化,那么这将需要花费时间进行诊断,可能没有的时间以及不需要花费的时间。