软件开发之DevOps

我们在学习和理解一个技术,我们首先需要知道他是什么,能给我们带来什么好处,它的使用场景是什么,核心的理论、原理是什么,有什么相关的技术栈。

1.首先我们先来理解DevOps是什么,DevOps 是一种结合 软件开发(Development)IT 运维(Operations) 的方法论与实践文化。

2.目标或者说好处是让软件 更快、更稳定地开发、测试、发布和运行。

1️⃣ DevOps 核心理念

DevOps 强调 协作、自动化、持续改进

  • 开发和运维协作 🤝

    打破传统"开发写完就丢给运维"的模式。

  • 自动化流程 ⚙️

    自动构建、测试、部署软件。

  • 持续交付 🔁

    小版本快速上线,而不是大版本长周期发布。

2️⃣ DevOps 典型流程

|----------------------------------------------------------------------------|
| 代码开发 ↓ 代码提交 (Git) ↓ CI 持续集成 自动构建 + 自动测试 ↓ CD 持续交付 / 持续部署 ↓ 上线部署 ↓ 监控 & 反馈 |

3️⃣ DevOps 常用工具

常见 DevOps 技术栈:

|---------|----------------------------------------|
| 过程 | 技术栈 |
| 代码管理 | * Git * GitLab * GitHub |
| CI/CD | * Jenkins * GitHub Actions * GitLab CI |
| 容器化 | Docker |
| 容器编排 | Kubernetes |
| 基础设施自动化 | * Terraform * Ansible |
| 监控 | * Prometheus * Grafana |

4️⃣ DevOps 能解决什么问题

传统模式问题:

开发:

我这边代码没问题

运维:

服务器上跑不了

DevOps 解决:

✔ 自动部署

✔ 自动测试

✔ 快速发布

✔ 可回滚

✔ 实时监控

5️⃣ DevOps 的好处

更快发布

更少故障

自动化运维

团队协作更好

---------------------------------------------------------------------

具体流程步骤

下面是一个 从写代码 → 自动部署到服务器 → 上线运行 的完整 DevOps 实战流程。我用目前企业最常见的一套技术栈来举例:

  • 代码管理:Git

  • CI/CD:Jenkins

  • 容器化:Docker

  • 容器编排:Kubernetes

  • 监控:Prometheus + Grafana

我把整个流程拆成 6 个真实公司里的步骤

一、开发阶段(写代码)

开发人员在本地写代码,例如:

  • Java(Spring Boot)

  • Python(Django / FastAPI)

  • Node.js

  • Go

开发完成后:

|--------------------------------------------------------------|
| git add . git commit -m "add login api" git push origin main |

代码被提交到代码仓库,比如:

  • GitHub

  • GitLab

二、触发 CI(持续集成)

当代码 push 后,CI 自动触发。

例如在 Jenkins 中会自动执行 pipeline:

|---------------------------------|
| 代码提交 ↓ 触发 Jenkins ↓ 自动构建 ↓ 自动测试 |

Jenkins pipeline 示例:

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| pipeline { agent any stages { stage('Checkout') { steps { git 'https://github.com/example/project.git' } } stage('Build') { steps { sh 'mvn clean package' } } stage('Test') { steps { sh 'mvn test' } } } } |

三、构建 Docker 镜像

CI 会把应用打包成 Docker 镜像。

使用 Docker

Dockerfile 示例:

|-------------------------------------------------------------------------------------|
| FROM openjdk:17 COPY target/app.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"] |

构建镜像:

|-----------------------------|
| docker build -t myapp:1.0 . |

四、推送镜像到镜像仓库

镜像需要上传到仓库,例如:

  • Docker Hub

  • Harbor

|--------------------------------------------------------------------|
| docker tag myapp:1.0 myrepo/myapp:1.0 docker push myrepo/myapp:1.0 |

五、CD 自动部署到服务器

CI 完成后,CD 开始部署。

如果使用 Kubernetes

部署文件:

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myrepo/myapp:1.0 ports: - containerPort: 8080 |

部署:

|----------------------------------|
| kubectl apply -f deployment.yaml |

相关推荐
wanhengidc1 小时前
云手机 高振畅玩不踩坑
运维·服务器·安全·web安全·智能手机
有谁看见我的剑了?2 小时前
linux 添加硬盘后系统识别不到硬盘处理
linux·运维·服务器
JoyCong19982 小时前
ToDesk远程屏幕墙技术白皮书:如何重塑全局运维视界
运维·电脑·远程工作
偶尔上线经常挺尸2 小时前
《100个“反常识”经验15:Nginx 502排查:从应用到内核》
运维·nginx·性能调优·反向代理·502错误·http排错
思茂信息3 小时前
CST软件如何进行参数化扫描?
运维·开发语言·javascript·windows·ecmascript·软件工程·软件需求
计算机安禾3 小时前
【Linux从入门到精通】第31篇:防火墙漫谈——iptables与firewalld防护指南
linux·运维·php
下一页盛夏花开4 小时前
ubuntu 20中安装QT以后出现红色空心断点
linux·运维·ubuntu
sxgzzn6 小时前
光伏数智化综合平台:让光伏电站运维更智能、更高效
运维
乌托邦的逃亡者8 小时前
Linux中如何检测IP冲突
linux·运维·tcp/ip