DevOps与CI/DC概念

一 、什么是DevOps

DevOps 是 Development(开发)Operations(运维) 的组合词,核心是通过自动化工具和文化变革,打通开发、测试、运维的壁垒,实现软件交付的高效协作。它的目标是缩短开发周期、提升部署频率,同时保障系统稳定性

通俗举例:

想象一个团队要开发一个网站:

  • 传统模式:开发写完代码后,丢给测试团队,测试通过后再交给运维部署。过程中需要多次手动沟通,效率低且容易出错。
  • DevOps 模式:开发提交代码后,自动触发测试、构建镜像、部署到服务器,整个过程由工具链自动完成,团队协作无缝衔接。

二、什么是 CI/CD

CI/CD持续集成(Continuous Integration)持续交付/持续部署(Continuous Delivery/Deployment) 的缩写,是 DevOps 方法论的核心实践。它的目标是在应用开发阶段,通过引入自动化工具,频繁向客户交付,加速软件开发和发布周期,同时确保代码质量和稳定性

核心概念分解

1. 持续集成(CI)

  • 定义:开发人员频繁(例如每天多次)将代码提交到共享仓库(如 Git),并通过自动化工具(如 Jenkins、GitLab CI)自动触发构建和测试流程。每次提交都会验证代码是否与其他成员的修改冲突,是否通过单元测试、集成测试等
  • 通俗举例
    假设一个团队在开发一款手机应用,每个开发者负责不同功能模块。每当有人写完一段代码(比如新增一个登录按钮),系统会自动将代码合并到主分支,并模拟用户点击按钮的测试。如果测试失败(比如按钮点击后闪退),团队会立即收到通知并修复问题。这样避免了代码堆积到后期才暴露冲突和漏洞。

2. 持续交付(CD)

  • 定义:在 CI 的基础上,将已验证的代码自动部署到预生产环境(如测试服务器),确保随时可以手动触发发布到生产环境。此阶段可能包含人工审核环节
  • 通俗举例
    手机应用通过 CI 测试后,会自动生成一个测试版本,供产品经理或客户预览。如果新功能符合预期,只需点击“发布”按钮,就能将更新推送到应用商店。这一过程避免了手动打包和部署的繁琐。

3. 持续部署(CD)

  • 定义:持续交付的更高阶形态,完全自动化部署到生产环境,无需人工干预。适用于高度信任自动化测试的场景
  • 通俗举例
    如果团队对自动化测试非常自信(例如电商网站的促销页面更新),代码通过所有测试后,系统会自动将新页面推送到线上,用户无需等待即可看到最新内容。

流程图示例

[开发阶段]  
1. 代码提交 → 开发人员将代码推送至 Git 等版本控制仓库(如 GitHub、GitLab)  
   ↓  
[持续集成 (CI)]  
2. 自动化构建 → 触发 CI 工具(如 Jenkins、GitLab CI)自动拉取代码,编译并生成可执行文件或容器镜像  
   ↓  
3. 自动化测试 → 执行单元测试、代码扫描(如 SonarQube)、集成测试等,验证代码质量   
   ├─ 测试通过 → 进入下一步  
   └─ 测试失败 → 反馈开发者修复,重新提交代码  
   ↓  
[持续交付 (CD)]  
4. 部署到预生产环境 → 将构建产物自动部署到测试环境(如 QA 环境、预生产环境)  
   ↓  
5. 自动化验收测试 → 运行端到端测试、性能测试等,确保功能符合预期   
   ↓  
6. 人工审核 → 团队确认测试结果,手动触发生产环境部署(持续交付)  
   ↓  
[持续部署(可选)]  
7. 全自动部署(蓝绿/金丝雀) → 通过 CD 工具(如 Kubernetes、Ansible)将代码自动部署到生产环境(无需人工干预)  
   ↓  
8. 监控与反馈 → (Prometheus/Grafana)

三、什么是 Pipeline 流水线

Pipeline 流水线(也称为 Jenkins Pipeline)是一种通过代码定义软件交付流程的自动化工具,用于实现持续集成(CI)和持续交付(CD)。它将软件开发过程中的构建、测试、部署等环节串联成一条可编排、可追溯的流水线,以提升效率并减少人为错误。以下是其核心概念和特点:


1. 核心定义与核心价值

  • 定义:Pipeline 流水线以代码(如Jenkinsfile)的形式定义自动化流程,将开发、测试、部署等任务划分为多个阶段(Stage),并通过工具链执行这些任务
  • 核心价值
    • 自动化:替代传统手动操作,减少人为干预
    • 可重复性:确保流程在不同环境(开发、测试、生产)中一致运行
    • 可追溯性:记录每个阶段的执行状态和日志,便于问题排查

2. 关键组成部分

Pipeline 流水线包含以下核心元素:

  1. 阶段(Stage):逻辑上划分的任务单元,如构建(Build)、测试(Test)、部署(Deploy)
  2. 步骤(Step):阶段内的具体操作,例如执行 Shell 命令、编译代码、运行测试等
  3. 代理(Agent):指定流水线运行的环境(如 Jenkins 主节点或代理节点)
  4. 并行与串行:支持并行执行任务以提升效率(例如同时运行单元测试和集成测试)

示例代码(声明式语法):

pipeline {
    agent any
    stages {
        stage('Build') { steps { sh 'mvn clean package' } }
        stage('Test') { steps { sh 'mvn test' } }
        stage('Deploy') { steps { sh 'kubectl apply -f app.yaml' } }
    }
}

此示例展示了三个阶段:构建 Java 项目、运行测试、通过 Kubernetes 部署


3. 两种语法模式

  • 声明式流水线(Declarative Pipeline)--- 主流:
    • 结构化语法,更易读写,适合大多数场景。
    • 使用pipeline块定义全局流程,支持参数化、条件判断等
  • 脚本化流水线(Scripted Pipeline):
    • 基于 Groovy 的灵活语法,适合复杂逻辑。
    • 使用node块定义执行环境,支持自定义函数和流程

对比

模式 适用场景 复杂度 示例工具
声明式 标准流程(构建-测试-部署) Jenkins Blue Ocean
脚本化 定制化流程(如循环、分支) Groovy 脚本

image-20250225005923913

posted @   运维小勾勾  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示