菜单

CI/CD 流水线

相关源文件

本页面提供了持续集成和持续交付(CI/CD)流水线的概述,解释了DevOps背景下的核心概念、工具和实现方法。有关ArgoCD的GitOps实现的具体信息,请参阅 ArgoCD的GitOps

什么是CI/CD流水线?

CI/CD 流水线是自动化的工作流程,使团队能够可靠高效地构建、测试和部署代码变更。它们通过以一致、可重复的方式将开发活动与操作部署连接起来,成为现代软件交付实践的基石。

  • 持续集成 (CI) 侧重于将来自多个贡献者的代码变更自动集成到共享存储库中,并进行自动构建和测试,以早期发现问题。
  • 持续交付 (CD) 通过自动将应用程序交付到选定的基础设施环境来扩展CI,确保代码始终处于可部署状态。
  • 持续部署 更进一步,它会自动部署通过生产流水线所有阶段的每一次变更。

CI/CD 流水线组件

来源: .github/workflows/ci_workflow.yml scripts/run_ci.sh

持续集成 (CI)

持续集成是一种频繁地将代码变更集成到共享存储库中的实践,随后进行自动构建和测试。CI帮助团队在开发周期的早期发现和解决集成问题。

CI 关键组成部分

  1. 源代码管理:存储和版本控制代码变更的Git存储库
  2. 构建自动化:编译代码,创建可执行的制品
  3. 自动化测试:单元、集成和功能测试
  4. 代码质量检查:静态代码分析、代码检查、安全扫描

CI工具概述

工具类型主要功能
Jenkins自托管可通过插件扩展,成熟的生态系统
CircleCI云/自托管配置简单,设置快速
GitHub Actions云服务与GitHub紧密集成,将工作流视为代码
GitLab CI/CD云/自托管集成到GitLab平台
Travis CI云服务配置简单,对开源友好

CI实施示例

此存储库包含一个使用GitHub Actions的CI工作流,该工作流在拉取请求上运行以确保代码质量

来源: .github/workflows/ci_workflow.yml scripts/run_ci.sh

GitHub Actions 工作流文件定义了一个在Ubuntu上运行的CI作业

.github/workflows/ci_workflow.yml1-17

CI脚本执行两项主要检查

  1. Markdown文件的语法检查
  2. Python文件的PEP8代码风格验证

scripts/run_ci.sh1-20

持续交付/部署 (CD)

持续交付通过确保代码变更在通过CI检查后自动部署到测试或暂存环境来扩展CI。持续部署更进一步,自动部署到生产环境。

CD 关键组成部分

  1. 部署自动化:用于部署应用程序的脚本或工具
  2. 基础设施即代码:以代码形式定义基础设施
  3. 环境管理:管理不同的部署目标
  4. 发布编排:协调复杂的部署
  5. 监控和回滚:验证部署成功

CD工具和方法

方法工具用例
传统CDJenkins, CircleCI, GitHub Actions通用应用程序部署
GitOpsArgoCD, FluxKubernetes原生部署
基础设施即代码Terraform, AWS CloudFormation基础设施配置
配置管理Ansible, Chef, Puppet系统配置

部署策略

来源: topics/kubernetes/CKA.md400-500

事件驱动的CI/CD流水线示例

此存储库包含一个使用AWS S3和Lambda进行事件驱动自动化的示例,该示例演示了一个可应用于CI/CD流水线的模式

来源: scripts/aws s3 event triggering/s3-lambda/s3-lambda.py scripts/aws s3 event triggering/aws_s3_event_trigger.sh

此模式适用于CI/CD工作流,其中特定事件触发流水线操作,例如

  • 上传新制品到存储桶触发部署
  • 配置更改触发基础设施更新
  • 服务监控警报触发回滚程序

此示例中使用的Lambda函数

scripts/aws s3 event triggering/s3-lambda/s3-lambda.py1-38

CI/CD与Kubernetes

将CI/CD流水线与Kubernetes集成时,通常会使用几种模式和工具

Kubernetes部署方法

来源: topics/kubernetes/CKA.md400-454 topics/kubernetes/exercises/taints_101/exercise.md

Kubernetes部署策略

对于生产环境,Kubernetes中可以实现不同的部署策略

策略描述实现
滚动更新 (Rolling Update)默认策略,逐步替换Podkubectl set image 或新的部署YAML
蓝绿部署运行两个相同的环境,切换流量服务选择器更改
金丝雀部署将部分流量路由到新版本多个带有加权服务的部署
A/B 测试 (A/B Testing)基于请求属性的路由具有流量拆分的Ingress控制器

来源: topics/kubernetes/CKA.md460-500

CI/CD最佳实践

流水线设计

  1. 流水线即代码:在版本控制的配置文件中定义流水线
  2. 快速反馈:优化流水线以提供快速反馈
  3. 并行化:并行运行独立的阶段
  4. 幂等性:设计流水线阶段以可重复获得相同结果
  5. 快速失败:将快速检查放在流水线早期

安全考量

  1. 安全敏感信息管理:切勿在流水线定义中存储敏感信息
  2. 最小权限:为CI/CD系统使用最小权限
  3. 制品签名:签名构建的制品以验证真实性
  4. 安全扫描:在流水线中包含漏洞扫描
  5. 合规性检查:自动化策略和合规性验证

测试策略

来源: .github/workflows/ci_workflow.yml scripts/run_ci.sh

CircleCI:一个常用的CI/CD工具

CircleCI是一个流行的持续集成和持续交付平台,用于实现DevOps实践。

CircleCI配置结构

来源: topics/circleci/README.md

CircleCI 关键概念

概念描述
管道整个CI/CD配置(.circleci/config.yaml)
工作流多个作业的编排,定义它们的执行顺序
作业 (Jobs)用于执行一组步骤的容器
步数要执行的实际命令
OrbsCircleCI配置的可重用包

来源: topics/circleci/README.md36-42

一个基本的CircleCI配置包括

  1. 版本:指定CircleCI配置版本
  2. 作业:定义要执行的工作
  3. 工作流:组织作业及其运行顺序

一个简单的CircleCI配置示例

来源: topics/circleci/README.md62-80

结论

CI/CD流水线通过自动化构建、测试和部署流程,成为现代软件交付实践的基石。有效实施CI/CD实践使团队能够更频繁地交付软件变更,并以更高的质量和更低的风险。

本存储库包含使用GitHub Actions和脚本的CI实施示例,以及可应用于CI/CD场景的事件驱动自动化模式示例。有关ArgoCD的GitOps方法的具体信息,请参阅关于 ArgoCD的GitOps 的专用页面。