push 模式推送
CI/CD 是持续集成和持续交付/部署的缩写,旨在简化并加快软件开发生命周期。
持续集成(CI)是指自动且频繁地将代码更改集成到共享源代码存储库中的做法。持续交付和/或持续部署(CD)是一个由两部分组成的过程,涉及代码更改的集成、测试和交付。持续交付不会自动部署到生产环境,持续部署则会自动将更新发布到生产环境。
目前大多数 CI/CD 工具都使用基于 Push 的部署模式,例如 Jenkins、CircleCI 等。这种模式一般都会在 CI 流水线运行完成后执行一个命令(比如 kubectl)将应用部署到目标环境中。



CI 部分并没有什么区别,无非就是测试、构建镜像、推送镜像、修改部署清单等等。重点在于 CD 部分。
Argo CD 会被部署在 Kubernetes 集群中,使用的是基于 Pull 的部署模式,它会周期性地监控应用的实际状态,也会周期性地拉取 Git 仓库中的配置清单,并将实际状态与期望状态进行比较,如果实际状态不符合期望状态,就会更新应用的实际状态以匹配期望状态。
通常在生产环境中是不允许所有人访问 Kubernetes 集群的,如果直接在 Kubernetes 集群中控制访问权限,必须要使用复杂的 RBAC 规则。在 Git 仓库中控制权限就比较简单了,例如所有人(DevOps 团队,运维团队,研发团队,等等)都可以向仓库中提交 Pull Request,但只有高级工程师可以合并 Pull Request。
这样做的好处是,除了集群管理员和少数人员之外,其他人不再需要直接访问 Kubernetes 集群,只需访问 Git 仓库即可。对于程序而言也是如此,类似于 Jenkins 这样的 CI 工具也不再需要访问 Kubernetes 的权限,因为只有 Argo CD 才可以 apply 配置清单,而且 Argo CD 已经部署在 Kubernetes 集群中,必要的访问权限已经配置妥当,这样就不需要给集群外的任意人或工具提供访问的证书,可以提供更强大的安全保障。

