运维-- 云计算与 CI/CD
前言
更多运维相关知识:蓝队技能学习_其实防守也摸鱼的博客-CSDN博客

持续更新ing~
介绍
如果说前面的监控和日志是运维的“眼睛”,那云计算和 CI/CD 就是运维的“双手”和“高速公路”。它们彻底改变了我们管理服务器和发布软件的方式。
☁️ 云计算:告别“买服务器”,拥抱“租算力”
在云时代之前,上线一个应用需要经历一个漫长的流程:申请预算 -> 采购物理机 -> 机房上架 -> 安装系统 -> 配置网络。这个过程动辄需要几周甚至几个月。
云计算的出现,把这一切变成了像“用水用电”一样简单。你只需要在阿里云、AWS 这样的云平台网页上点几下鼠标,或者敲几行命令,几分钟内就能获得一台配置好的服务器。
作为云运维,你的工作重心从“修硬件”变成了“管资源”。核心工作主要包括:
- 计算资源 (ECS/EC2):管理云上的虚拟机。你需要知道如何创建、配置、启动、停止这些实例,以及如何根据业务流量设置弹性伸缩(比如双十一流量暴增时自动增加服务器,流量低谷时自动减少,从而节省成本)。
- 网络规划 (VPC):在云上构建一个隔离的、属于你自己的私有网络环境。你需要规划子网、配置路由表和安全组(云上的防火墙),确保你的服务器安全且能互相通信。
- 存储与数据库 (OSS/RDS):管理云盘、对象存储(用来存图片、视频等大文件)以及云数据库。云平台会帮你搞定数据库的备份、主从高可用等底层运维工作,让你能更专注于业务。
- 安全与监控 (RAM/CloudMonitor):管理用户的访问权限(谁能操作哪些资源),并利用云平台自带的监控工具查看资源的使用情况。
一句话总结:云计算让你不再为硬件故障发愁,而是专注于如何更高效、更安全、更省钱地使用云上的资源。
🚀 CI/CD:打通开发与运维的“自动化高速公路”
有了云服务器,发布软件的速度变快了,但流程本身可能还是很痛苦。
在没有 CI/CD 的传统模式下,开发写完代码后,需要手动打包,然后找运维申请上线。运维拿到代码包,再手动登录服务器,执行一系列复杂的命令来部署。这个过程不仅慢,而且极易出错(比如漏掉一个配置文件、敲错一个命令)。
CI/CD(持续集成/持续交付) 就是为了解决这个问题而生的。它是一条自动化的“高速公路”,让代码从开发人员的电脑,一路畅通无阻地跑到生产环境的服务器上。
它主要分为两个阶段:
🔄 CI(持续集成):代码的“自动质检员”
CI 的核心思想是:开发人员应该频繁地(比如每天)把代码合并到主干分支。每次合并,都会自动触发一个流程:
- 自动拉取代码:从 Git 仓库(如 GitLab、GitHub)拉取最新的代码。
- 自动编译构建:把代码编译成可执行的程序或 Docker 镜像。
- 自动运行测试:运行单元测试、代码质量扫描等,确保新代码没有引入 Bug。
如果任何一步失败,系统会立刻通知开发人员:“你提交的代码有问题,请修改!” 这样就能在问题刚产生时就发现并修复,而不是等到上线后才爆炸。
🚢 CD(持续交付/部署):应用的“自动快递员”
当代码通过了 CI 的“质检”后,就会进入 CD 阶段。
- 持续交付 (Continuous Delivery):自动将通过测试的代码部署到测试环境或预发布环境。最后一步发布到生产环境,通常需要运维人员点击一个“批准”按钮,以保证风险可控。
- 持续部署 (Continuous Deployment):更进一步的自动化。只要代码通过了所有测试,就会全自动地发布到生产环境,完全不需要人工干预。
实现 CI/CD 的常用工具:
- Jenkins:老牌且功能极其强大的开源工具,插件生态非常丰富,几乎能对接任何系统。
- GitLab CI / GitHub Actions:与代码仓库深度集成,配置简单(通常只需在代码库里写一个 YAML 配置文件),是目前非常流行的选择。
🤝 它们是如何协同工作的?
在实际的现代企业里,云计算和 CI/CD 是紧密结合的:
- 开发提交代码:开发人员将新功能代码提交到 GitLab 仓库。
- 触发流水线:GitLab 仓库检测到新代码,自动触发 CI/CD 流水线(比如 Jenkins 或 GitLab CI)。
- CI 阶段:流水线自动拉取代码,进行编译、打包(比如打包成一个 Docker 镜像),并运行自动化测试。
- CD 阶段:测试通过后,流水线自动将这个 Docker 镜像推送到镜像仓库,然后调用 Kubernetes (K8s) 的接口,将新版本的容器自动部署到云上的 K8s 集群中。
- 上线完成:整个过程可能只需要几分钟,用户就访问到了最新的功能。
一句话总结:CI/CD 实现了软件交付的自动化,而云计算提供了弹性的运行环境。两者结合,让软件发布变得像发朋友圈一样简单、快速、可靠。
到这里,整个现代运维的核心知识体系(Linux基础 -> 自动化与容器 -> 监控日志 -> 云与CI/CD)咱们就全部打通了!
实战
既然前面已经体验过 Docker 和 Ansible 的“手感”了,那咱们就趁热打铁,直接写一个最简单的 CI/CD 流水线。
为了让你最快上手,我们使用目前最流行、且与代码仓库深度集成的 GitHub Actions。它不需要你额外安装任何复杂的软件,只要有一个 GitHub 账号,在网页上点几下就能跑起来。
我们将模拟一个最经典的场景:当开发人员把代码推送到 GitHub 后,系统自动拉取代码、运行测试,最后自动把应用部署到云服务器上。
🛠️ 准备工作:打通 GitHub 与云服务器的“安全通道”
在让 GitHub 自动帮你部署代码之前,必须先赋予它登录你服务器的权限。我们通常使用 SSH 密钥来实现免密登录。
- 在云服务器上生成密钥对
登录到你的云服务器,执行以下命令生成一对 SSH 密钥:
ssh-keygen -t ed25519 -C "github-actions"
(一路回车即可。这会在 ~/.ssh/ 目录下生成两个文件:id_ed25519 是私钥,id_ed25519.pub 是公钥)
- 将公钥加入服务器的授权列表
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
(解释:这相当于把一把“备用钥匙”交给了 GitHub,让它以后能合法登录)
- 在 GitHub 仓库配置 Secrets(保管机密信息)
回到你的 GitHub 项目页面,进入Settings->Secrets and variables->Actions。点击New repository secret,添加以下几个变量:
SERVER_HOST:你的云服务器公网 IP。SERVER_USER:服务器登录用户名(比如root或ubuntu)。SERVER_SSH_KEY:把刚才在服务器上生成的 私钥 (id_ed25519文件里的全部内容) 复制粘贴进来。
📝 编写流水线“剧本”
在 GitHub 中,CI/CD 的配置文件是一个 YAML 文件。在你的项目根目录下,创建这样一个文件路径:.github/workflows/deploy.yml。
把下面这段“剧本”复制进去:
name: Auto Deploy Pipeline
# 1. 触发条件:当代码推送到 main 分支时,自动触发这条流水线
on:
push:
branches: [ "main" ]
jobs:
# 2. 定义一个名为 "Test" 的任务
Test:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4 # 官方动作:拉取你的代码
- name: Run Tests
run: |
echo "正在自动运行单元测试..."
# 这里可以写 pytest、npm test 等真实的测试命令
echo "测试通过!"
# 3. 定义一个名为 "Deploy" 的任务,必须在 Test 成功后才能执行
Deploy:
needs: Test
runs-on: ubuntu-latest
steps:
- name: Deploy to Server via SSH
uses: appleboy/ssh-action@master # 使用第三方开源动作:通过 SSH 连接服务器
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
echo "成功登录云服务器,开始自动部署..."
# 这里可以写拉取 Docker 镜像、重启服务、执行 Ansible 脚本等真实部署命令
echo "部署完成,应用已上线!"
🚀 见证奇迹:代码自动跑起来
- 提交代码:把这个
.github文件夹和里面的代码提交并推送到你的 GitHub 仓库的main分支。 - 查看运行过程:打开你的 GitHub 仓库页面,点击顶部的 Actions 标签页。你会看到一个绿色的圆点在转动,这就是你的流水线正在运行!
- 查看日志:点击进去,你能清晰地看到两个阶段:
- 第一个阶段
Test自动拉取了代码,并打印了“测试通过”。 - 第二个阶段
Deploy自动通过 SSH 登录了你的云服务器,并打印了“部署完成”。
- 第一个阶段
整个过程不到一分钟,完全不需要人工干预!
💡 总结:流水线是如何串联起所有知识的?
通过这个极简的流水线,你会发现之前学过的知识全都串联起来了:
- 开发人员提交了包含 Docker 配置的代码。
- CI/CD 流水线自动接管,运行测试保证质量。
- 测试通过后,流水线通过 SSH 登录到云上的 Linux 服务器。
- 在服务器上执行命令,可能还会调用 Ansible 来更新配置,或者重启 K8s 集群里的容器。
- 最后,Prometheus 和 ELK 默默接管,继续监控和记录新上线应用的健康状态。
这就是现代 DevOps 的魅力:用代码管理一切,让机器去做机器擅长的事,让人去解决更有创造力的问题。
更多推荐
所有评论(0)