文章

20分钟了解devOps

devOps基础

20分钟了解devOps

介绍

DevOps是一种概念,一种理想的合作体系,原意是希望开发部门与运维部门的密切合作,把一些原本重复且复杂的流程变成自动化的事情给敲定,以及监控软件专案是否存活,还有程序化部署云端、地端。免去开发部门在开发上,除了写代码之外,需要手动操作的部分,都交给运维部门设定自动化工具完成这些事情。

例如开发人员需要频繁地将代码合并到master的过程 - 这时需要自动合并或定时合并,软件在什么时间段会大量占用CPU - 这时候就需要监控软件,还有例如网站流量过大导致崩溃 - 这时就需要自动水平扩展虚拟机器的功能等等。

DevOps的目的就是以更快速的解决客户问题为出发点,宗旨就是合作与自动化

CI/CD区

CI

持续集成Continuous Integration是一种软件工程实践,强调在软件开发生命周期中频繁地将各开发人员的代码更改集成到主干代码库(例如约定俗成是master或者周迭代之类的)中。CI能够自动执行代码构建、单元测试、集成测试等任务,以确保每次集成都不会破坏现有系统的稳定性,并及时发现潜在问题。

核心步骤 :

  • 版本控制集成:CI系统会监控版本控制系统(如 Git)的代码库,当有代码提交(commit)或合并(merge)时,CI系统会自动触发构建流程。
  • 自动化构建:CI系统会按照预定义的构建脚本编译代码、生成可执行文件或部署包,确保代码在集成过程中能够正常编译和构建。
  • 自动化测试:在构建完成后,CI系统会运行一系列自动化测试(如单元测试、集成测试、功能测试等),以验证新代码与现有代码之间的兼容性及功能的正确性。
  • 持续反馈:CI系统会生成详细的构建和测试报告,并将结果反馈给开发团队。如果集成失败,系统会及时通知相关开发者,以便他们快速修复问题。
  • 可持续交付的基础:CI为持续交付(Continuous Delivery, CD)和持续部署(Continuous Deployment)奠定了基础,通过持续集成,开发团队可以确保代码库始终处于可部署的状态,从而支持更频繁的发布周期。

CD

持续交付Continuous Delivery一种先进的软件工程实践,旨在通过自动化和标准化的流程,确保代码库中的每一项变更在经过严格的测试和验证后,始终处于可发布的状态。持续交付扩展了持续集成CI的理念,不仅关注代码的集成和测试,还涵盖了从开发到生产环境的整个交付链路。

核心步骤 :

  • 端到端自动化管道:从代码提交、构建、测试到部署。该管道会自动触发一系列测试,包括单元测试、集成测试、性能测试和安全测试,以确保每次变更都是安全且高质量的。
  • 环境一致性和版本控制:在CD中,所有的部署环境(开发、测试、预生产、生产)都需要保持高度一致性。环境的配置和软件版本必须通过严格的版本控制和基础设施即代码(Infrastructure as Code, IaC)策略进行管理,以确保在任何环境下部署的代码行为一致。
  • 自动化部署和发布:使得每一次通过所有测试的变更都能够自动部署到预生产或生产环境。虽然部署过程自动化,但最终的发布操作通常仍由人工决策触发,确保在适当的时间进行发布。
  • 反馈循环与监控:持续交付强调部署后的持续监控,收集关于系统性能、用户行为和潜在问题的实时数据。这些数据会反馈到开发团队,形成一个闭环,帮助快速定位问题并推动持续改进。
  • 发布灵活性:CD提供了高度的发布灵活性,使得团队可以在任何时间点发布高质量的软件版本。发布的过程已经过充分的自动化测试验证,从而降低了发布的风险。
  • 持续部署Continuous Deployment:这是CD的进一步延伸,指的是一旦代码通过了所有的测试和验证,便会自动部署到生产环境,完全消除人工干预的步骤,达到真正的持续发布。

总的来说

  1. CI/CD技术 : 工具的话就是使用Jenkins或是Github Actions。
  2. 版本控制 : 通常会使用GitLab(私有实体主机)或bitbucket(私有实体主机)来架设一个本地端的server来提高安全性。
  3. 单元测试自动化 : 如果是C#就用vstest.console、Python就用JUnit-unittest、还有Selenium网页自动化脚本工具
  4. 扫弱点 : 例如敏感字眼
  5. 编译自动化 : 例如C#需要MSBuild编译。

云端区

  1. 云端服务器架构技术 : 例如垂直扩展Scale up(内容都放到一台主机,发生事情就不断强化该主机)、水平扩展Scale out(一般都是云服务,例如A服务器的网站流量过大导致崩溃,系统就会自动把A服务器再复制一份到B服务器上,不够就接着复制,让请求分担到不同的服务器上实现分流)
  2. 容器化技术 : docker、K8S(主要是不同主机上的容器的一个大管家),容器主要是为了方便创造出测试环境给软件测试使用。

监控区

  1. 监控工具influxdb : 时序资料库,专门用来存储和管理时间序列资料,时间序列资料是指随着时间而手机、存储、解释和分析的资料,例如每秒每分钟或是每小时收集的设备执行状态,电脑的CPU使用率、网站流量数据等等。
  2. 监控工具grafana : 可以抓取各种db资料来显示各种图表的网页工具,在高并发的案例中很常跟influxdb做搭配使用。

日志区

  1. 日志收集ELK : 是Elastic Search、Logstash和Kibana的缩写。

除了上面的内容是几乎DevOps工程师需要做的内容,还有一些内容是视公司而定的,例如管理数据库、假设Queue的Server、rabbitmq、kafka之类的。

本文由作者按照 CC BY 4.0 进行授权