
文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载导读本文是 90DaysOfDevOps 系列第 5 天的学习笔记核心主题是以单个应用为线索完整走一遍 DevOps 世界中的八个生命周期阶段计划Plan→ 编码Code→ 构建Build→ 测试Testing→ 发布Release→ 部署Deploy→ 运维Operate→ 监控Monitor并在此基础上理解连续Continuous的真正含义——即持续集成CI、持续交付CD与持续部署CD是如何把上述阶段拼装成一条自动化闭环的。读完本文你将掌握 DevOps 应用生命周期每个阶段中 DevOps 工程师的具体职责与介入时机能够用一套清晰的阶段模型去对应仓库中的 Jenkins Pipeline、Kubernetes 部署清单与监控配置并理解 CI/CD 三个概念的精确边界连续交付 前四阶段、持续集成 前五阶段、持续部署 后三阶段。上图是本文的核心骨架左侧 Dev 区域承载 Plan、Code、Build、Test右侧 Ops 区域承载 Deploy、Operate、Monitor中间以 Release 作为连接开发与运维的枢纽监控结果最终反馈回上游构成无限循环。一、DevOps 应用生命周期的八个阶段1. 计划Plan一切始于计划阶段。这是开发团队聚在一起决定下一个 Sprint迭代要交付哪些功能feature与修复哪些缺陷bug fix的环节。对 DevOps 工程师而言这是关键的介入窗口提前了解需求弄清楚接下来会有哪些工作流经你负责的领域从而提前做准备影响决策方向可以影响开发团队的技术选型与路径引导他们使用你已经搭建好的基础设施把开发团队当作用户/客户这是整篇文章反复强调的一个视角——对于 DevOps 工程师来说开发软件工程团队就是你的客户。趁他们还没有走上一条糟糕的技术路线之前尽早与他们协同工作是计划阶段最重要的价值所在。2. 编码Code计划结束后开发团队开始写代码。你可能不会深度参与这一阶段但在以下场景可以发挥作用帮助开发团队更好地理解基础设施让他们知道环境中有哪些可用服务如消息队列、对象存储、数据库等以及如何以最优方式与这些服务通信连接串、鉴权方式、网络拓扑开发完成后代码会被合并merge进代码仓库repository成为后续构建阶段的原材料。3. 构建Build构建是第一段自动化流程的起点。我们从开发团队的代码仓库取出源码然后将其变成可运行的制品artifact。根据编程语言不同构建过程可能是转译transpiling如 TypeScript → JavaScript编译compiling如 Go、Java 等编译型语言构建 Docker 镜像docker image将应用连同运行时环境打包成容器镜像。无论采用哪种方式这个过程都要通过 CI/CD Pipeline 来驱动。仓库中的 Jenkinsfile 就是一个具体例子——它用podTemplate在 Kubernetes 集群内动态拉起一个包含maven与kaniko两个容器的构建 Podmaven:3.8.1-jdk-8容器负责 Java 构建环境gcr.io/kaniko-project/executor:debug容器负责在 Kubernetes 内无特权地构建并推送 Docker 镜像/kaniko/executor --context $(pwd) --destination 镜像仓库/helloworld:1.0通过secret: dockercred挂载.dockerconfigjson作为推送到镜像仓库所需的登录凭据。从源码结构可以推断这条 Pipeline 完整覆盖了克隆代码 → 构建制品 → 测试 → 产出镜像的自动化工序正是本文 Build 阶段的实战载体。4. 测试Testing构建完成后需要在新构建的制品上运行测试。测试通常由开发团队或 QA质量保障人员编写DevOps 工程师也可以对应该编写哪些测试提出建议。测试的目的非常明确尽可能减少把问题带到生产环境的概率。它无法做到 100% 保证但我们要尽量接近两个不不引入新缺陷not introducing new bugs不破坏原本正常工作的功能not breaking things that used to work。这也是为什么测试必须放在构建之后、发布之前的原因——它是质量闸门quality gate。在 Jenkinsfile 中可以看到测试阶段以stage(Test Image)形式存在构建与测试在 Pipeline 中作为独立 stage 串行执行符合先构建、后测试的顺序。5. 发布Release测试通过后进入发布阶段。这一阶段可能不是一个显式步骤具体取决于应用类型对于某些应用代码只要留在 Git 仓库中如 GitHub 或任意 git repository即可视为已发布对于大多数正式应用发布是指把编译后的代码或构建好的 Docker 镜像推送到注册表registry或制品仓库repository使其在生产部署阶段能被生产服务器访问和拉取。简单说发布 让制品可被获取部署 把制品放进生产环境。镜像推送这一步在上述 Jenkinsfile 中由 kaniko 的--destination参数完成。6. 部署Deploy部署紧随发布之后是整个生命周期的终局end game。因为只有把代码真正放进生产环境production业务方business才能从团队此前投入的时间、精力与努力中兑现实际价值。部署的方式随基础设施演进而变化。仓库中的 nginx-stateless-demo.yaml 展示了一个典型的 Kubernetes 声明式部署示例通过Namespace隔离环境、Deployment声明期望副本数replicas: 1与容器镜像nginx和Service将 Pod 的 80 端口暴露为服务三个资源实现一条命令滚动部署并对外提供服务的效果。这正是现代部署阶段基础设施即代码、声明式而非命令式的体现。7. 运维Operate应用部署完成即进入运维阶段。这一阶段包含大量脏活累活例如响应客户反馈客户抱怨网站或应用响应很慢你需要定位原因构建自动扩缩容auto-scaling高峰期增加服务器数量、低谷期减少服务器数量按流量动态调节资源建立生产反馈回路feedback loop将生产环境发生的关键事件例如有一次部署发生了回滚自动反馈给运维团队。反馈是否自动化取决于你的环境但目标永远是能自动化就自动化有些环境需要先完成若干前置步骤才能实现但理想状态下部署应当作为自动化流程的一部分自动完成部署通知如果实现了自动部署最好在运维步骤中加入某种通知机制让运维团队知道部署已经发生了。8. 监控Monitor前面所有阶段最终都通向监控——它是最后一环也是贯穿性的一环。监控对于以下工作至关重要故障排查troubleshooting没有监控你根本不会知道系统出了问题自动扩缩容auto-scaling扩缩容决策依赖监控数据。常见的监控指标metrics包括监控维度说明内存使用率% memory utilization判断是否内存泄漏或容量不足CPU 使用率% CPU utilization判断计算资源是否饱和磁盘空间disk space防止磁盘写满导致服务不可用API 端点响应时间API endpoint response time判断接口是否变慢、用户体验是否受损日志logs让开发团队无需登录生产系统即可查看发生了什么、正在发生什么其中日志logs被特别强调它给了开发团队一双不进入生产系统也能看清现场的眼睛是监控体系中不可替代的一环。仓库的 Monitoring 目录中提供了对应的实践素材可用于后续深入了解监控体系的搭建。二、重复与连续从一次流程到闭环循环循环往复Rinse Repeat八个阶段走完一遍之后并不意味着结束——你马上回到起点重新进入计划阶段把整个流程再走一遍。每一次循环都为下一次迭代积累反馈尤其是来自监控与运维的反馈这正是 DevOps 与瀑布式一次交付的本质区别。连续ContinuousCI/CD 的本质许多工具帮助我们实现上面这套连续流程其终极目标是让全流程完全自动化。云基础设施或任何环境中的这套自动化通常被概括为三个概念持续集成Continuous Integration, CI持续交付Continuous Delivery, CD持续部署Continuous Deployment, CD合称 CI/CD。在 90 天计划的后续内容中会专门拿出一整周时间配合示例与实操讲解仓库中的 CICD 目录即为此准备帮助掌握 CI/CD 基础。值得强调的是这三个连续概念不过是 DevOps 生命周期各阶段的简单组合。理解下面三组公式即可精准区分持续交付 计划 编码 构建 测试Continuous Delivery Plan Code Build Test持续交付的产物是经过测试、随时可以发布的制品——它保证了制品始终处于可发布状态但不包含发布动作本身。持续集成 计划 编码 构建 测试 发布Continuous Integration Plan Code Build Test Release持续集成实际上是持续交付各阶段的结果 发布阶段的结果。无论发布是失败还是成功结果都会反馈失败 → 反馈回持续交付阶段重新构建与测试修复问题成功 → 流转到持续部署阶段。持续部署 部署 运维 监控CI Release is Success Continuous Deployment Deploy Operate Monitor当持续集成产出了成功的发布就进入持续部署阶段把制品自动放进生产环境并持续运维、监控。至此整个 CI/CD 闭环完成持续交付覆盖生命周期前半段开发侧持续集成在前者之上追加发布动作持续部署覆盖生命周期后半段运维侧并依赖监控数据驱动下一次循环。三、将生命周期模型映射到仓库的 CI/CD 实践为了让概念落地仓库中已经准备了与本文八阶段一一对应的实践素材Pipeline 定义Jenkinsfile 以声明式stage组织克隆代码 → 构建 → 测试 → 推送镜像的流水线对应 Build / Testing / Release 阶段其配套的 Dockerfile 与 index.html 构成可构建的最小示例应用Jenkins 部署步骤steps.md 记录了在 minikube 上安装 Jenkins 的完整命令序列kubectl create namespace jenkins、helm repo add jenkinsci https://charts.jenkins.io、helm install jenkins -n jenkins -f jenkins-values.yml jenkinsci/jenkins、kubectl port-forward svc/jenkins 8080:8080等覆盖从零启动一个 CI 服务器、支撑上述 Pipeline 运行的全过程Helm 配置参数jenkins-values.yml 展示了 CI 服务器本身的声明式配置方式——例如controller.installPlugins内置 kubernetes、git、configuration-as-code 等插件、controller.resources请求/限制 CPU 与内存、controller.JCasC通过配置即代码管理安全域与授权策略、agent.resources构建代理 Pod 的资源配额与persistence持久化 8Gi 卷。这套以代码管理 CI 服务器本身的做法正是持续交付理念在工具链层面的延伸部署清单nginx-stateless-demo.yaml 对应 Deploy 阶段展示 Kubernetes 声明式部署的最小完备形态监控素材Monitoring 目录为 Monitor 阶段尤其是日志与指标准备了后续深入学习所需的配置与文档。从源码结构可以看出仓库中的 CI/CD 示例严格遵循了本文描述的阶段顺序Pipeline 按构建 → 测试 → 发布推镜像推进而 Jenkins 本身以 Helm Chart 部署在 Kubernetes 上其代理agent也以 Pod 形式动态运行在集群内——这一组合正是云原生 CI/CD的典型形态。四、小结本日核心要点DevOps 应用生命周期 Plan → Code → Build → Testing → Release → Deploy → Operate → Monitor周而复始计划阶段把开发团队当客户提前介入、引导技术路线构建是自动化的起点测试是质量闸门发布让制品可被获取部署才真正兑现业务价值运维阶段追求能自动化就自动化并要建立生产反馈回路与部署通知监控尤其日志是所有故障排查与自动扩缩容的基础也是驱动循环重启的燃料CI/CD 三概念 生命周期阶段的组合持续交付前四阶段、持续集成前五阶段、持续部署后三阶段其终极目标是全流程自动化闭环。继续深入时可以顺次阅读第 6 天后续章节并结合仓库中的 CICD 与 Kubernetes 目录动手实践本文描述的流水线与部署流程。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps 第五天从计划到监控的 DevOps 全生命周期与 CI/CD 持续循环90DaysOfDevOps 第五天从计划到监控的 DevOps 全生命周期与 CI/CD 持续循环 本篇为 90DaysOfDevOps 学习计划 2022文档/教程90DaysOfDevOps 第 5 天DevOps 应用生命周期全解析——从规划到监控的持续循环90DaysOfDevOps 第 5 天DevOps 应用生命周期全解析——从规划到监控的持续循环 导读 本文是 90DaysOfDevOps 学习路线20文档/教程从规划到监控拆解 DevOps 应用生命周期与 CI/CD 的完整闭环从规划到监控拆解 DevOps 应用生命周期与 CI/CD 的完整闭环 本篇技术指南源自 90DaysOfDevOps https://link.gitcod文档/教程上一篇libwebsockets 原始套接字接管Socket Adoption实战lws-minimal-raw-adopt-tcp 详解下一篇终极指南如何使用FanControl一键解决Windows电脑风扇噪音与散热难题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考