什么是 CI/CD? - reddit


作为一名想要成为 DevOps 工程师的人,肯定想了解什么是 CI/CD 以及我们为什么需要它们?
CI/CD 是语言/运行时(例如 Java/OpenJDK、JS/Node、Ruby、Docker 容器中的某些东西)之间的粘合代码,包括交付(取决于您的工件类型,例如 Docker 容器、Maven 存储库、符合 npm注册表)和您想要运行的环境的部署机制(例如 Docker、带有 docker-compose 的 Docker、Ansible、Kubernetes、带有 Helm 的 Kubernetes、带有 kustomize 的 Kubernetes 等)
 
CI/CD 是获取源代码存储库和新推送的更改、构建它并运行测试和/或在收到更改后实时部署更改的软件。
这样开发人员就可以推送更改,这些更改将自动持续集成和持续部署。
每当修复错误或创建新功能时,都会创建一个测试或一组测试,这些测试可以自动运行以确保该功能没有损坏或错误没有退化。
  
CI是指持续集成
持续意味着定期/一直在做。集成意味着有不同的人/不同的公司编写的代码,你需要在同一个代码库中添加这些代码,并确保没有什么被破坏。编译和运行自动化测试是其中的一个重要部分。

编写软件是一项团队运动。仅仅因为一个错字就很容易破坏软件,如果你没有自动测试,你就会破坏过去工作的东西,在你的客户发现之前不会发现。

持续集成是定期将代码与组织的其他部分集成(合并)的做法。过去,个人或团队经常将他们的代码在分支中隔离数月,并且很少合并。
 
CD可以指持续交付或持续部署
有时人们在一个管道中建立这个,有时是两个不同的管道。交付和部署是否是同义词并不是100%清楚,这在很大程度上取决于你构建什么样的应用程序。

对于一个最先进的网络应用,你可能会在交付管道中构建Docker镜像,并在交付管道中将其部署到Kubernetes。由于你需要在不同的环境中进行测试,你可能有步骤或单独的管道来部署到某种测试环境和生产环境。

你需要这样做,因为你想经常部署小的增量变化。你不希望建立了6个月,然后有一个星期的软件安装停机时间,并且不知道它在生产中是否有效。

如果你发现你的小改动引入了一个错误,那就很容易回滚和修复。如果你的6个月的大改动引入了问题,你怎么知道你在哪里和什么时候做了破坏性的改动?

持续交付是始终保持应用程序处于可部署状态的一种理念和一套实践。为了实现这一点,我们构建了一个部署管道,用于验证更改的正确性,并通过一系列测试环境交付这些更改,最终进行生产部署。
 
CI/CD 一起是在开发人员工作时频繁合并更改并让这些更改通过一系列自动化测试的做法。完成后,这些更改将捆绑到一个发布候选中,然后可以自动部署到生产中。练习 CI/CD 的团队通常会在一天内产生许多候选版本。