年初在家待了一段时间看了两本书收获还是挺多的. 这些年一直忙于项目, 经历了软件项目的每个阶段, 多多少少知道每个阶段是个什么, 会做哪些事情浮于表面, 没有深入去思考每个阶段背后的理论基础, 最佳实践和落地工具. 某天leader说你书看完了, 只有笔记没有总结, 你就写个总结讲讲吧.


1 软件系统研发现状

软件研发主要有设计、研发、上线运维这几个过程, 有想过这些问题:

1) 需求该怎么收集?

2) 产品规划该怎么规划?

3) 迭代开发怎么管理? 计划怎么执行?

4) 怎么上线?怎么运维?

5) 每个阶段该怎么协作?

devops设计 devops具体做什么_研发过程

2  要解决哪些问题

 从以上问题中, 大概可以梳理出研发过程中需要解决的问题,

1) 研发生命周期管理

2) 研发过程中的产出物

3) 业务领域知识

4) 如何提升效率

5) 如何让研发过程可视化

3 评估

3.1 DevOps 评估三原则

3.1.1 流动原则

       建立从开发到运维之间快速的、平滑的、能向客户交付价值的工作流,要为这个全局目标进行优化,而非围绕一系列局部目标,如功能开发的完成度、测试中问题的发现率和修正率、运维维护的可用性等。通过持续加强工作内容的可视化,减小每批次大小和等待间隔,内建质量以防止缺陷向下游传递,从而增强流动性。通过加快流动,缩短前置时间,进一步提高质量。

3.1.2  反馈原则

        反馈原则使得在从右向左的每个阶段中能够快速、持续地获得工作反馈,目标是建立安全和可靠的工作系统。通过在整个价值流和组织中建立快速、频繁、高质量的信息流,包括反馈和前馈回路,可以让系统更安全。这样就可以在规模较小、修复成本较低的情况下发布并修复问题,在灾难发生前消除问题,并创造出组织性学习氛围。

3.1.3 持续学习与实验原则

      技术价值流的核心是建立高度信任的文化,强调每个人都是持续学习者,必须在日常工作中承担风险,通过科学的方式改进流程和开发产品,从成功和失败中积累经验教训,从而识别有价值的想法,摈弃无用的想法,所有局部的经验都会快速转化为全局性的改进,从而帮助整个组织尝试和实践新技术。通过建立持续、动态的学习机制,帮助团队快速并自动地适应不断变化地环境,进而帮助企业在市场竞争中脱颖而出。

devops设计 devops具体做什么_运维_02

 3.2 评估项

      从devops的三个原则出发, 构建如下简要评估项, 仅供参考:


端到端价值流

频繁小批上线

依据带宽限制需求量

全功能团队

团队协作

各角色协作

过程透明

工程效能

需求变更

构建

架构

自动测试

部署

4 设计

基于项目现状画出价值流图,  仔细思考每个阶段需要做什么, 有哪些流程, 上下有之间的关系咋样, 现阶段有么有瓶颈, 怎么改进, 如果要改进需要哪些资源, 需要谁的支持才能做成这件事.

 

devops设计 devops具体做什么_devops设计_03

5 实施

5.1 选型

选择合适的工具实现项目价值流的运转, 可以选择使用华为、阿里、腾讯等厂商的一体化平台, 也可选择工具软件自己搭建.

5.1.1 Jira

Jira Software 是位居榜首的敏捷项目管理工具,团队可使用该工具放心地规划、跟踪、发布和支持出色的软件。它是您整个开发生命周期的单一数据源,为自主团队提供情景信息,助力团队在与更大的业务目标保持关联的同时快速采取行动。无论是用于管理简单的项目,还是用于支持 DevOps 实践,Jira Software 都能让团队轻松推进工作、保持一致并在情境中进行沟通。

官网地址: Collaboration software for software, IT and business teams

5.1.2 Jenkins

jenkins 号称“万物皆可自动化”, 它是一款开源的自动化服务器, 是持续集成/持续交付的事实标准, 其中有数千款插件连接您所知的各种平台,支持自动化构建、部署、交付和任何类型的项目。

官网地址:Jenkins中国

5.1.3 Git

Git是一个免费开源的分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。Git易于学习,占地面积小,性能闪电般快。它以廉价的本地分支、方便的暂存区和多个工作流等功能胜过了Subversion、CVS、Perforce和ClearCase等SCM工具。

官网地址:Git

 

5.1.4 Nexus

Nexus 是一个强大的 Maven 仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用 Nexus 你可以只在一个地方就能够完全控制访问 和部署在你所维护仓库中的每个 Artifact。Nexus 是一套 “开箱即用” 的系统不需要数据库,它使用文件系统加 Lucene 来组织数据。Nexus 使用 ExtJS 来开发界面,利用 Restlet 来提供完整的 REST APIs,通过 m2eclipse 与 Eclipse 集成使用。Nexus 支持 WebDAV 与 LDAP 安全身份认证。

5.1.5 Prometheus

Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。

Prometheus 提供了通用的数据模型和快捷数据采集、存储和查询接口。它的核心组件Prometheus server会定期从静态配置的监控目标或者基于服务发现自动配置的自标中进行拉取数据,当新拉取到的数据大于配置的内存缓存区时,数据就会持久化到存储设备当中。

1.每个被监控的主机都可以通过专用的exporter 程序提供输出监控数据的接口,它会在目标处收集监控数据,并暴露出一个HTTP接口供Prometheus server查询,Prometheus通过基于HTTP的pull的方式来周期性的采集数据。
2.任何被监控的目标都需要事先纳入到监控系统中才能进行时序数据采集、存储、告警和展示,监控目标可以通过配置信息以静态形式指定,也可以让Prometheus通过服务发现的机制进行动态管理。
3.Prometheus 能够直接把API Server作为服务发现系统使用,进而动态发现和监控集群中的所有可被监控的对象。

5.2 搭建

工具搭建完成后,  按照设计改进的价值流运行,  对项目的整个研发价值流需要持续测试、持续监控、持续改进.