什么是CI(Continuous integration持续集成)
在传统的软件开发中,集成过程通常在每个人完成工作后的项目结束时进行。整合通常需要数周或数月的时间,可能会非常痛苦。持续集成是一种将集成阶段置于开发周期中较早的做法,因此,构建,测试和集成代码的时间安排更为规则。
开发人员通常使用称为CI Server的工具来进行构建和集成。CI要求自检代码。这是用于自我测试以确保其按预期工作的代码,这些测试通常称为单元测试。集成代码后,当所有单元测试通过时,将得一个最新的的代码版本。这表明他们已经验证了自己的更改已成功集成到一起,并且代码按测试期望的那样工作。
什么是CD(Continuous delivery持续交付)
持续交付意味着每次更改代码,集成并构建代码时,他们还将在与生产非常相似的环境中自动测试该代码。我们将此部署到不同环境并在不同环境上进行测试的过程称为部署管道。部署管道通常具有开发环境,测试环境和过渡环境,但是这些阶段因团队,产品和组织而异。
在每个不同的环境中,开发人员编写的代码都经过不同的测试。当代码在生产环境中部署时,它们将在生产环境中工作。至关重要的是,代码只提升到(上测试)在部署管道的下一个环境,如果出现故障,整个团队可以更轻松地了解问题可能出在哪里,并在代码进入生产环境之前予以解决。这个过程对我们这个行业的人来说非常强大。这意味着,如果代码的测试在所有环境中都通过了,团队负责人就会知道开发人员的代码在投入生产时可能会按预期工作。一旦测试在所有环境中通过,团队负责人就可以立即决定最终用户是否通过测试。我们现在要在生产中使用这种绿色产品吗?是! 因此,一旦开发人员完成构建,便可以立即为客户提供经过全面测试的全新工作软件。
什么是CD(Continuous deployment持续部署)
在这种实践中,团队负责人所做的每一项更改都通过了所有测试阶段,并自动投入生产。要实现连续部署,团队负责人首先需要进行连续交付,因此在开始练习连续部署之前,先决定哪个对您更合适,持续交付都是为了增强整个业务的能力,因此至少您应该参与确定是否应该使用持续部署。
持续集成,持续部署和持续交付之间有什么区别?
1)持续集成(Continuous integration)
这种做法是将团队中不同开发人员的变更尽早集成到主线中,最好每天进行几次。这样可以确保各个开发人员处理的代码不会转移太多。当您将流程与自动化测试结合在一起时,持续集成可以使您的代码变得可靠。
2)持续交付(Continuous delivery)
保持代码库随时可部署的做法。除了确保您的应用程序通过自动化测试外,它还必须具有将其投入生产所需的所有配置。然后,许多团队会进行推送更改,以立即将自动化测试传递到测试或生产环境中,以确保快速的开发周期。
3)持续部署(continuous deployment)
与持续集成密切相关,是指保持您的应用程序可随时部署,甚至在最新版本通过所有自动化测试的情况下,甚至自动发布到测试或生产环境。
CI/CD应用场景
1)开发人员将本地代码上传gitlab版本服务器
2)jenkins通过webhook插件自动到gitlab服务器拉取最新代码
3)通过docker-maven-plugin插件自动编译代码
4)将自定义镜像上传docker私服仓库
5)k8s集群自动拉取最新版本镜像
6)自动化部署整个项目
7)用户通过nginx负载均衡访问整个项目
为什么需要CI/CD
持续集成(CI)是一种开发实践,其中开发人员经常(最好每天几次)将代码集成到共享存储库中。然后可以通过自动构建和自动测试来验证每个集成。尽管自动化测试不是严格意义上的CI的一部分,但通常隐含了它。
定期集成的主要好处之一是,您可以快速检测到错误并更轻松地定位它们。由于引入的每个更改通常很小,因此可以快速查明引入缺陷的特定更改。
近年来,CI已成为软件开发的最佳实践,并遵循一系列关键原则。其中包括版本控制,构建自动化和自动化测试。
此外,持续部署和持续交付已成为最佳实践,可让您随时随地部署应用程序,甚至在每次引入新更改时甚至将主代码库自动推入生产环境。这使您的团队可以快速行动,同时保持可以自动检查的高质量标准。