本文概述
- 持续集成
- 持续部署
理想情况下, 聘请软件工程师编写需要交付到生产环境中的代码, 以便需要该产品的企业可以使用它。为了满足业务(通常称为用户/客户端)的需求, 产品必须无缺陷。
软件工程师遵循的典型方法是在分支中工作, 并创建一个拉取请求, 以使用已进行的新更新来更新主分支。我们采用了编写测试的做法, 以确保新的更改不会引入错误。在大多数情况下, 当开发人员使用某个功能时, 他们通常在完全完成该功能之前才创建拉取请求。他们准备好了之后会发生什么?
- 他们花费大量时间尝试使自己的代码库与生产分支在工作时所做的更改保持最新。
- 为此, 他们必须解决一系列合并冲突。
- 他们还有可能中断生产分支, 这会继续影响那些在发现并解决问题之前从分支撤出的人员。
有什么解决方案?
持续集成
文章图片
为了防止上述情况发生;工程团队可以采用称为” 持续集成” 的做法-顾名思义, 它涉及将开发人员所做的代码更改持续集成到共享分支/存储库中。要集成的代码必须经过验证的测试, 以确保它不会破坏应用程序。仅在测试通过时才进行集成
为了理解这一点, 让我们想象一个由10个开发人员组成的团队的现实场景。这些开发人员在本地创建一个分支, 他们在其中编写用于实现某些功能的代码。他们选择不做任何更改就选择发送拉取请求, 而不是在完全完成该功能后发送拉取请求。假设开发人员正在开发一种功能, 该功能允许用户管理应用程序中的各个任务, 则创建新的模式就是此类更改的一个示例。为了坚持一个持续的集成模式, 开发人员不必等待任务功能完成, 而是推送这个小的更改(与她正在处理的内容相比), 并创建一个合并到代码的拉取请求。
在集成此新更改之前, 必须运行一系列测试。
软件工程团队利用Travis CI之类的工具来创建这些集成过程和测试。使用这样的工具, 测试将自动进行, 这样, 只要将拉取请求提交到设置过程中选择的目标分支, 它就可以运行。
生成测试结果, 创建拉取请求的开发人员可以查看结果并进行必要的更改。坚持这种尽可能少地集成代码的模式以及运行经过验证的测试的好处是;
- 相关团队有可能知道是什么原因导致了构建过程或测试失败。这减少了将错误运送到生产环境的可能性。
- 如果团队将流程自动化, 他们将有大量的时间专注于提高生产力。
测试类型
在编写将成为集成过程一部分的测试时, 以下是可以在该过程中实现的一些测试:
- 集成–它组合了软件的各个单元, 并将它们作为一个整体进行测试。
- 单元–测试软件的各个单元或组件, 例如方法或功能。
- 用户界面–断言该软件从用户的角度来看运行良好。
- 验收–测试软件是否符合业务要求。
持续集成工具
无需深入探讨, 你可以在当前或新项目中使用这些工具。
- Travis CI –在开源世界中享有盛誉, 并承诺你可以在几分钟内对代码进行无缝测试。
- Circle CI –为你提供强大的功能, 灵活性和控制能力, 以自动化从控制到部署的流程。
- Jenkins –提供数百个插件来支持任何项目的构建, 部署和自动化。
如果你不熟悉Jenkins, 那么我建议你参加本Udemy课程, 以学习Java和.NET的CI。持续部署
文章图片
如果你构建的功能在部署到生产环境之前在存储库中放置了数周或数月, 将会有什么好处。工程团队可以尽一切努力将几乎没有的更改集成到主分支中, 他们还可以将这些更改尽快推到生产环境中。
练习连续部署的目的是, 一旦开发人员将这些更改集成到主分支中, 便将这些更改归还给用户。
与连续集成的情况一样, 在使用连续部署时, 将设置自动测试和检查以确保验证新集成的更改。仅在这些测试通过时才进行部署。
为了使团队从连续部署的实践中受益, 他们需要具备以下条件:
- 自动化测试是所有连续工程实践的重要基础。在连续部署的情况下, 要部署的代码必须符合团队为向最终用户推出的内容而制定的标准。理想情况下, 如果新变化低于阈值, 则测试应该失败并且不被整合。否则, 它变得集成了。
- 尽管进行了背对背的自动化测试, 但仍有一些错误可能会渗入生产环境。为此, 团队必须能够撤消已进行的更改–撤消部署。这应该将生产代码还原为进行新更改之前的代码。
- 需要监视系统来跟踪已推送到生产环境的更改。这样, 团队便可以跟踪用户在使用已部署的更改时遇到的错误。
总结
开发团队的生产力对于业务的成功至关重要。为了确保他们富有成效, 必须采取鼓励这样做的做法。持续集成和部署就是此类做法的示例。
通过持续的集成, 团队可以每天推送尽可能多的代码。借助此实现, 可以将新添加的更改尽快部署到用户变得容易。部署这些更改可以从用户那里获得反馈。最后, 企业将能够根据收到的反馈进行创新, 这对每个人都是双赢的。
【了解持续集成和持续部署】如果你是开发人员并且对学习CI / CD感兴趣, 那么请查看此精彩课程。
推荐阅读
- Jupyter Notebook入门指南
- 11个初学者学习Python的资源
- 3个用于前端开发的最佳JavaScript框架/库
- 来看看基于Kite的Python自动补全工具吧
- 每个程序员都应该知道的13个最佳IDE
- 10种用于格式化和优化CSS文件的最佳工具
- 如何使用JSON Web Token保护Flask REST API()
- 每个数据科学家都应该知道的18种必备软件
- 提高你的批判性思维的17个编码挑战