Continuous Integration & Delivery #
持续集成(CI)和持续交付(CD)工具通过嵌入式质量保证,促进快速高效的开发。CI自动化代码变更,立即构建和测试代码,确保生成可部署的工件。CD更进一步,将工件推向部署阶段。
成熟的CI/CD系统监控源代码的变化,自动构建和测试代码,然后将其从开发环境迁移到生产环境,在此过程中,工件必须通过各种测试或验证,以决定该过程是继续还是失败。此类别中的工具支持这种方法。
解决的问题 #
构建和部署应用程序是一个复杂且容易出错的过程,尤其是当它涉及大量人工干预和手动操作时。开发人员未将软件集成到代码库中时,工作时间越长,发现错误所需的时间就越长,修复的难度也越大。通过定期集成代码,可以早期捕捉到错误,并更容易进行故障排除。毕竟,在几行代码中找到错误远比在几百行代码中找到错误要容易得多,更糟糕的是,如果错误已经进入生产环境,发现和修复的难度就更大了。
虽然像Kubernetes这样的工具为运行和管理应用提供了极大的灵活性,但它们也为CI/CD工具带来了新的挑战和机遇。云原生CI/CD系统能够利用Kubernetes本身来构建、运行和管理CI/CD过程,通常称为管道(pipeline)。Kubernetes还提供了关于应用健康的信息,使云原生CI/CD工具更容易判断给定的变更是否成功,或是否应该回滚。
提供的帮助 #
CI工具确保开发人员引入的任何代码更改或更新都能自动、持续地构建、验证并与其他更改集成。每次开发人员添加更新时,自动化测试会触发,以确保只有良好的代码被集成到系统中。CD扩展了CI,包括将CI过程的结果推送到预生产和生产环境中。
假设开发人员更改了一个Web应用的代码。CI系统看到代码更改后,构建并测试该Web应用的新版本。CD系统将这个新版本部署到开发、测试、预生产,最终到生产环境。在这个过程中,系统会在每个步骤后测试部署的应用。所有这些系统共同构成了该Web应用的CI/CD管道。
技术基础 #
随着时间的推移,许多工具被构建出来,帮助将代码从源代码库移动到生产环境。像计算领域的其他许多方面一样,云原生开发的出现改变了CI/CD系统。一些传统工具,如Jenkins,可能是市场上最为普及的CI工具,已经完全进行了一次改革,以更好地融入Kubernetes生态系统。其他工具,如Flux和Argo,开创了一种新的持续交付方式——GitOps,OpenGitOps 项目正在努力将其定义为一个供应商中立的标准。
一般来说,您会发现这个领域中的项目和产品要么是(1)CI系统,(2) CD系统,(3) 帮助CD系统判断代码是否准备好推送到生产环境的工具,或者(4)像Spinnaker和Argo这样的工具同时具备这三种功能。Flux和Argo是该领域的CNCF成熟项目,Keptn是CNCF孵化项目,OpenFeature、OpenGitOps和OpenKruise是CNCF沙箱项目。您还可以找到由持续交付基金会托管的更多选项。在这个领域中寻找工具,帮助您的组织自动化生产环境的路径。
Keywords #
- CI/CD - 持续集成/持续交付
- Continuous integration - 持续集成
- Continuous delivery - 持续交付
- Continuous deployment - 持续部署
- Blue/green - 蓝绿部署
- Canary deploy - 金丝雀部署
蓝绿部署和金丝雀部署
蓝绿部署(Blue/Green Deployment)和金丝雀部署(Canary Deployment)是两种不同的软件发布策略,它们在风险控制和逐步推出新版本方面有显著区别:
蓝绿部署(Blue/Green Deployment):
- 同时维护两个完全相同的生产环境
- 一个是当前运行的环境(例如蓝色环境)
- 另一个是新版本的环境(绿色环境)
- 部署特点:
- 新版本完全准备就绪后,一次性将所有流量切换到新环境
- 切换瞬间完成,用户无感知
- 如果出现问题,可以立即回滚到旧环境
金丝雀部署(Canary Deployment):
- 逐步、渐进式地推出新版本
- 部署特点:
- 将少量流量(如 5-10%)引导到新版本
- 逐步增加新版本的流量比例
- 在整个过程中持续监控新版本的性能和稳定性
- 风险控制:
- 如果新版本出现问题,只影响少量用户
- 可以及时中止新版本的推广
主要区别:
- 风险程度:蓝绿部署风险较高(全量切换),金丝雀部署风险较低(渐进式)
- 切换方式:蓝绿部署是瞬时全量切换,金丝雀部署是逐步增量切换
- 监控粒度:金丝雀部署可以更精细地观察新版本的表现
- 适用场景:
- 蓝绿部署:对系统要求较高,希望快速切换
- 金丝雀部署:需要谨慎验证新版本,控制潜在风险
选择哪种部署策略取决于具体的业务场景、系统复杂度和风险承受能力。
Projects #
- Argo (graduated)
- Flux (graduated)
- Keptn (incubating)
- OpenKruise (incubating)
- Brigade (archived)
- OpenGitOps (sandbox)
- PipeCD (sandbox)
- werf (sandbox)
- Kube-burner (sandbox)