前言

更多运维相关知识:蓝队技能学习_其实防守也摸鱼的博客-CSDN博客

持续更新ing~

介绍

如果说前面的监控和日志是运维的“眼睛”,那云计算和 CI/CD 就是运维的“双手”和“高速公路”。它们彻底改变了我们管理服务器和发布软件的方式。


☁️ 云计算:告别“买服务器”,拥抱“租算力”

在云时代之前,上线一个应用需要经历一个漫长的流程:申请预算 -> 采购物理机 -> 机房上架 -> 安装系统 -> 配置网络。这个过程动辄需要几周甚至几个月。

云计算的出现,把这一切变成了像“用水用电”一样简单。你只需要在阿里云、AWS 这样的云平台网页上点几下鼠标,或者敲几行命令,几分钟内就能获得一台配置好的服务器。

作为云运维,你的工作重心从“修硬件”变成了“管资源”。核心工作主要包括:

  • 计算资源 (ECS/EC2):管理云上的虚拟机。你需要知道如何创建、配置、启动、停止这些实例,以及如何根据业务流量设置弹性伸缩(比如双十一流量暴增时自动增加服务器,流量低谷时自动减少,从而节省成本)。
  • 网络规划 (VPC):在云上构建一个隔离的、属于你自己的私有网络环境。你需要规划子网、配置路由表和安全组(云上的防火墙),确保你的服务器安全且能互相通信。
  • 存储与数据库 (OSS/RDS):管理云盘、对象存储(用来存图片、视频等大文件)以及云数据库。云平台会帮你搞定数据库的备份、主从高可用等底层运维工作,让你能更专注于业务。
  • 安全与监控 (RAM/CloudMonitor):管理用户的访问权限(谁能操作哪些资源),并利用云平台自带的监控工具查看资源的使用情况。

一句话总结:云计算让你不再为硬件故障发愁,而是专注于如何更高效、更安全、更省钱地使用云上的资源。


🚀 CI/CD:打通开发与运维的“自动化高速公路”

有了云服务器,发布软件的速度变快了,但流程本身可能还是很痛苦。

在没有 CI/CD 的传统模式下,开发写完代码后,需要手动打包,然后找运维申请上线。运维拿到代码包,再手动登录服务器,执行一系列复杂的命令来部署。这个过程不仅慢,而且极易出错(比如漏掉一个配置文件、敲错一个命令)。

CI/CD(持续集成/持续交付) 就是为了解决这个问题而生的。它是一条自动化的“高速公路”,让代码从开发人员的电脑,一路畅通无阻地跑到生产环境的服务器上。

它主要分为两个阶段:

🔄 CI(持续集成):代码的“自动质检员”

CI 的核心思想是:开发人员应该频繁地(比如每天)把代码合并到主干分支。每次合并,都会自动触发一个流程:

  1. 自动拉取代码:从 Git 仓库(如 GitLab、GitHub)拉取最新的代码。
  2. 自动编译构建:把代码编译成可执行的程序或 Docker 镜像。
  3. 自动运行测试:运行单元测试、代码质量扫描等,确保新代码没有引入 Bug。

如果任何一步失败,系统会立刻通知开发人员:“你提交的代码有问题,请修改!” 这样就能在问题刚产生时就发现并修复,而不是等到上线后才爆炸。

🚢 CD(持续交付/部署):应用的“自动快递员”

当代码通过了 CI 的“质检”后,就会进入 CD 阶段。

  • 持续交付 (Continuous Delivery):自动将通过测试的代码部署到测试环境或预发布环境。最后一步发布到生产环境,通常需要运维人员点击一个“批准”按钮,以保证风险可控。
  • 持续部署 (Continuous Deployment):更进一步的自动化。只要代码通过了所有测试,就会全自动地发布到生产环境,完全不需要人工干预。

实现 CI/CD 的常用工具

  • Jenkins:老牌且功能极其强大的开源工具,插件生态非常丰富,几乎能对接任何系统。
  • GitLab CI / GitHub Actions:与代码仓库深度集成,配置简单(通常只需在代码库里写一个 YAML 配置文件),是目前非常流行的选择。

🤝 它们是如何协同工作的?

在实际的现代企业里,云计算和 CI/CD 是紧密结合的:

  1. 开发提交代码:开发人员将新功能代码提交到 GitLab 仓库。
  2. 触发流水线:GitLab 仓库检测到新代码,自动触发 CI/CD 流水线(比如 Jenkins 或 GitLab CI)。
  3. CI 阶段:流水线自动拉取代码,进行编译、打包(比如打包成一个 Docker 镜像),并运行自动化测试。
  4. CD 阶段:测试通过后,流水线自动将这个 Docker 镜像推送到镜像仓库,然后调用 Kubernetes (K8s) 的接口,将新版本的容器自动部署到云上的 K8s 集群中。
  5. 上线完成:整个过程可能只需要几分钟,用户就访问到了最新的功能。

一句话总结:CI/CD 实现了软件交付的自动化,而云计算提供了弹性的运行环境。两者结合,让软件发布变得像发朋友圈一样简单、快速、可靠。


到这里,整个现代运维的核心知识体系(Linux基础 -> 自动化与容器 -> 监控日志 -> 云与CI/CD)咱们就全部打通了!

实战

既然前面已经体验过 Docker 和 Ansible 的“手感”了,那咱们就趁热打铁,直接写一个最简单的 CI/CD 流水线。

为了让你最快上手,我们使用目前最流行、且与代码仓库深度集成的 GitHub Actions。它不需要你额外安装任何复杂的软件,只要有一个 GitHub 账号,在网页上点几下就能跑起来。

我们将模拟一个最经典的场景:当开发人员把代码推送到 GitHub 后,系统自动拉取代码、运行测试,最后自动把应用部署到云服务器上。


🛠️ 准备工作:打通 GitHub 与云服务器的“安全通道”

在让 GitHub 自动帮你部署代码之前,必须先赋予它登录你服务器的权限。我们通常使用 SSH 密钥来实现免密登录。

  1. 在云服务器上生成密钥对
    登录到你的云服务器,执行以下命令生成一对 SSH 密钥:
ssh-keygen -t ed25519 -C "github-actions"

(一路回车即可。这会在 ~/.ssh/ 目录下生成两个文件:id_ed25519 是私钥,id_ed25519.pub 是公钥)

  1. 将公钥加入服务器的授权列表
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

(解释:这相当于把一把“备用钥匙”交给了 GitHub,让它以后能合法登录)

  1. 在 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 "部署完成,应用已上线!"

🚀 见证奇迹:代码自动跑起来

  1. 提交代码:把这个 .github 文件夹和里面的代码提交并推送到你的 GitHub 仓库的 main 分支。
  2. 查看运行过程:打开你的 GitHub 仓库页面,点击顶部的 Actions 标签页。你会看到一个绿色的圆点在转动,这就是你的流水线正在运行!
  3. 查看日志:点击进去,你能清晰地看到两个阶段:
    • 第一个阶段 Test 自动拉取了代码,并打印了“测试通过”。
    • 第二个阶段 Deploy 自动通过 SSH 登录了你的云服务器,并打印了“部署完成”。

整个过程不到一分钟,完全不需要人工干预!

💡 总结:流水线是如何串联起所有知识的?

通过这个极简的流水线,你会发现之前学过的知识全都串联起来了:

  1. 开发人员提交了包含 Docker 配置的代码。
  2. CI/CD 流水线自动接管,运行测试保证质量。
  3. 测试通过后,流水线通过 SSH 登录到云上的 Linux 服务器
  4. 在服务器上执行命令,可能还会调用 Ansible 来更新配置,或者重启 K8s 集群里的容器。
  5. 最后,Prometheus 和 ELK 默默接管,继续监控和记录新上线应用的健康状态。

这就是现代 DevOps 的魅力:用代码管理一切,让机器去做机器擅长的事,让人去解决更有创造力的问题。

更多推荐