devops介绍
DevOps 是 Development 和 Operations 的组合,也就是开发和运维的简写。 DevOps是针对企业中的研发人员、运维人员和测试人员的工作理念,是他们在应用开发、代码部署和质量测试等整条生命周期中协作和沟通的最佳实践,DevOps强调整个组织的合作以及交付和基础设施变更的自动化、从而实现持续集成、持续部署和持续交付。 DevOps 四大平台:代码托管(gitlab/svn)、项目管理(jira)、运维平台(腾讯蓝鲸/开源平台)、持续交付(Jenkins/gitlab) 什么是持续集成(CI-Continuous integration): 持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作。(gitlab:针对开发实现持续集成) 什么是持续部署(CD-continuous deployment): 是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率。(jenkins:针对运维实现持续部署) 什么是持续交付(Continuous Delivery): 持续交付是在持续部署的基础之上,将产品交付到线上环境,因此持续交付是产品价值的一种交付,是产品价值的一种盈利的实现。 戴明环说明:
(项目架构)plan:JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域 (代码托管)code: (gitlab/svn) (代码创建)build: maven 代码编译 (代码测试)test:Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。 (版本控制)relase: Jenkins (部署)deploy: saltstack(自动化运维工具)saltstack是一个配置管理系统,能够维护预定义状态的远程节点。 (操作)operate: Elasticsearch (监控)monitor: zabbix
常见的部署方式:
开发自己上传--最原始的方案
开发给运维手动上传--运维自己手动部署
运维使用脚本复制--半自动化
结合 web 界面一键部署--自动化
常见的持续集成开源工具:
在公司的服务器安装某种程序,该程序用于按照特定格式和方式记录和保存公司多名开发人员不定期提交的源代码,且后期可以按照某种标记及方式对用户提交的数据进行还原。
1.CVS(Concurrent Version System):
早期的集中式版本控制系统,现已基本淘汰会出现数据提交后不完整的情况
2.SVN(Subversion)--集中式版本控制系统
2000 年开始开发,目标就是替代 CVS 集中式管理,依赖于网络,一台服务器集中管理目前依然有部分公司在使用
3.Gitlib—分布式版本控制系统:
4.客户端工具:eclipse intelliJ IDEA pycharm git
常见的代码部署方式: 2.2.1:蓝绿部署: 蓝绿部署指的是不停老版本代码(不影响上一个版本访问),而是在另外一套环境部署新版本然后进行测试,测试通过后将用户流量切到新版本,其特点为业务无中断,升级风险相对较小。 具体过程: 1、当前版本业务正常访问(V1) 2、在另外一套环境部署新代码(V2),代码可能是增加了功能或者是修复了某些 bug 3、测试通过之后将用户请求流量切到新版本环境 4、观察一段时间,如有异常直接切换旧版本 5、下次升级,将旧版本升级到新版本(V3) 蓝绿部署适用的场景: 1、不停止老版本,额外部署一套新版本,等测试发现新版本 OK 后,删除老版本。 2、蓝绿发布是一种用于升级与更新的发布策略,部署的最小维度是容器,而发布的最小维度是应用。 3、蓝绿发布对于增量升级有比较好的支持,但是对于涉及数据表结构变更等等不可逆转的升级,并不完全合适用蓝绿发布来实现,需要结合一些业务的逻辑以及数据迁移与回滚的策略才可以完全满足需求。 金丝雀发布: 金丝雀发布也叫灰度发布,是指在黑与白之间,能够平滑过渡的一种发布方式,灰度发布是增量发布的一种类型,灰度发布是在原有版本可用的情况下,同时部署一个新版本 应用作为“金丝雀”(小白鼠),测试新版本的性能和表现,以保障整体系统稳定的情况下,尽早发现、调整问题。 “金丝雀”的由来:17 世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;而当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察 觉,金丝雀却早已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为“瓦斯检测指标”,以便在危险状况下紧急撤离。 金丝雀发布、灰度发布步骤组成: 1、准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件。 2、从负载均衡列表中移除掉“金丝雀”服务器。 3、升级“金丝雀”应用(排掉原有流量并进行部署)。 4、对应用进行自动化测试。 5、将“金丝雀”服务器重新添加到负载均衡列表中(连通性和健康检查)。 6、如果“金丝雀”在线使用测试成功,升级剩余的其他服务器。(否则就回滚) 灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
灰度发布/金丝雀部署适用的场景: 1、不停止老版本,额外搞一套新版本,不同版本应用共存。 2、灰度发布中,常常按照用户设置路由权重,例如 90%的用户维持使用老版本,10%的用户尝 鲜新版本。 3、经常与 A/B 测试一起使用,用于测试选择多种方案。 2.2.3:滚动发布: 滚动发布,一般是取出一个或者多个服务器停止服务,执行更新,并重新将其投入使用。周而复始,直到集群中所有的实例都更新成新版本。
2.2.4:A/B 测试: A/B 测试也是同时运行两个 APP 环境,但是蓝绿部署完全是两码事,A/B 测试是用来测试应用功能表现的方法,例如可用性、受欢迎程度、可见性等等,蓝绿部署的目的是安 全稳定地发布新版本应用,并在必要时回滚,即蓝绿部署是一套正式环境环境在线,而A/B 测试是两套正式环境在线。