4.2 理解CI/CD流水线
软件系统的开发生命周期从代码开始,经过测试、工件生成,然后可能是更多的测试……最后,部署到生产环境。CI/CD流水线的基本思想是:每当开发人员提交更改到源代码控制系统(例如GitHub)时,这些更改都会立即被持续集成(Continuous Integration,CI)系统检测到并进行测试。
接下来通常会进行代码评审,并将来自功能分支或开发分支的代码更改(或者pull请求)合并到主分支。在Kubernetes的上下文中,CI系统还负责为服务构建Docker镜像并将它们推送到镜像仓库。现在,我们有了包含新代码的Docker镜像,接着就是CD系统发挥作用的时候了。
当有新镜像可用时,持续交付(Continuous Delivery,CD)系统将把它部署到目标环境中。通过预置和部署,CD可以确保整个系统处于目标状态。有时,如果系统不支持动态配置,则可能由于配置更改而发生部署。我们将在第5章中详细讨论配置问题。
因此,CI/CD流水线是一组检测代码更改的工具,并可以根据组织的流程和策略将更改一直推送到生产环境。这个流水线通常是由DevOps工程师构建和维护,供开发人员使用。
每个组织和公司(甚至是同一公司内的不同小组)都会有一些特殊的流程。在我的第一份工作中,接到的第一个任务就是用大量的递归Makefile来替换一个基于Perl的构建系统(这是当时CI/CD流水线的叫法),现在已经没有人理解这些递归了。构建系统必须在Windows上使用一些建模软件执行代码生成步骤,并使用两种不同的工具链在两种不同的Unix(包括嵌入式)上编译和运行C++单元测试,然后触发代码版本控制系统。因为我选择了Python作为开发语言,所以还不得不从头开始构建这一切。整个过程很有趣,但这些内容只对这家公司有用。
通常情况下我们认为CI/CD流水线是由事件驱动的工作流。图4-1演示了一个简单的CI/CD流水线。
图4-1 CI/CD流水线
该流水线的各阶段功能如下:
1)开发人员将他们的更改提交给GitHub(源代码控制)。
2)CI服务器运行测试、构建Docker镜像,并将镜像推到DockerHub(镜像仓库)。
3)Argo CD服务器检测到有一个新镜像可用,然后将其部署到Kubernetes集群。
现在我们已经了解CI/CD流水线,接下来让我们看看CI/CD流水线工具都有哪些。