目录
[2.1 持续交付的含义](#2.1 持续交付的含义)
[2.1.1 项目管理的视角](#2.1.1 项目管理的视角)
[2.1.2 产品研发的视角](#2.1.2 产品研发的视角)
[2.1.3 总结](#2.1.3 总结)
[2.2 持续交付涉及的运作环境](#2.2 持续交付涉及的运作环境)
[2.2.1 开发环境](#2.2.1 开发环境)
[2.2.2 测试环境](#2.2.2 测试环境)
[2.2.3 UAT环境](#2.2.3 UAT环境)
[2.2.4 准生产环境](#2.2.4 准生产环境)
[2.2.5 生产环境](#2.2.5 生产环境)
[2.3 总结](#2.3 总结)
[3.1 持续部署的含义](#3.1 持续部署的含义)
[3.2 持续部署包含的内容](#3.2 持续部署包含的内容)
[3.2.1 部署升级](#3.2.1 部署升级)
[3.2.2 部署验证](#3.2.2 部署验证)
[3.2.3 部署监控](#3.2.3 部署监控)
[3.3 持续部署过程中不同角色的操作内容](#3.3 持续部署过程中不同角色的操作内容)
[3.3.1 持续部署不同角色操作示意图](#3.3.1 持续部署不同角色操作示意图)
[3.3.2 持续部署不同角色操作内容说明](#3.3.2 持续部署不同角色操作内容说明)
[4.1 概述](#4.1 概述)
[4.2 配置管理](#4.2 配置管理)
[4.3 镜像管理](#4.3 镜像管理)
一、概述
前面的文章为大家介绍了持续集成流水线的技术实现,本文将继续带领大家了解持续交付与持续部署的相关知识,打通产品版本发布到线上持续运营的流程,逐步完成从产品规划到产品线上运营的全流程覆盖。
本文以持续交付、持续部署为主线,继续讲述DevSecOps平台里黄金管道子系统中持续交付与持续部署两个流程涉及的相关概念、系统及平台,帮助大家完善DevSecOps平台里黄金管道子系统相关领域知识。
二、持续交付基本概念
2.1 持续交付的含义
持续交付的含义在业界有多种不同的理解,根据岗位角色的不同,大体可分为两种。
2.1.1 项目管理的视角
站在项目管理的视角看,从项目的生命周期去理解持续交付,这种视角下持续交付的含义更多地偏向于产品研发到项目目标的达成,满足客户需求,达到项目验收完成项目回款的过程;
2.1.2 产品研发的视角
站在产品研发的视角看,表示产品通过测试验证,达到可交付给客户状态下的持续可交付性。
2.1.3 总结
本文中主要是指产品研发的视角下的持续交付,它早于持续部署流程,从需求规划到持续集成后,完成测试环境部署、验证,通过内部评审验收,达到用户可交付状态的这一段流程。其含义如下图所示:
如果用一句话来总结持续交付流程的含义,则是重点保障产品需求的持续实现,把最新版本的应用程序部署到UAT环境的持续性流程。
2.2 持续交付涉及的运作环境
为了帮助大家更好地理解持续交付及后续章节持续部署的流程,大家先要了解这一段流程中与运作环境相关的内容。
在软件产品研发的过程中,通常会涉及多套运行环境,这些环境在不同的场景下通常有不同的特定称谓,这是需要读者理解和掌握的。这些环境主要有:
2.2.1 开发环境
开发环境比较好理解,顾名思义是指软件开发人员在编码开发过程中所用的运行环境。这套环境对服务器配置要求不高,只要能方便开发人员进行代码调试,分析错误日志即可,不会与用户直接交互。通常来说,只有开发人员才会使用这套环境,因为需要不停地修改或上传代码、调整配置等,这套环境上的应用程序很不稳定。
2.2.2 测试环境
测试环境主要是用来进行软件产品测试验证的运行环境,通常是由测试人员和开发人员共同维护。大多数情况下,以测试人员维护为主。为了保障测试工作的持续开展,对环境的启停和修改不如开发环境那样频繁,且这套环境上部署的软件产品相对开发环境来说版本要更稳定,以便于测试人员开展功能测试和集成测试。
2.2.3 UAT环境
名词UAT是英文User Acceptance Test的缩写,意思是用于进行用户接受度测试的运行环境,是来提高客户使用体验的。和我们通常说的客户演示环境或用户验收环境类似,这套环境对系统的稳定性、版本的稳定性、需求满足程度均有一定的要求,主要使用对象为客户。
2.2.4 准生产环境
又称仿真环境,是指已完成部署但未正式开始生产使用的运行环境,一般来说系统架构、关键参数基本与生产环境一致,仅仅是没有真实的业务流量。
2.2.5 生产环境
直接面向最终用户提供的正式、对外服务的真实业务环境,这套环境的管理有严格的要求,同时系统稳定性也有很高的要求,如果对这套环境进行修改或调整,需要严格审批发布流程。
2.3 总结
在DevSecOps平台的黄金管道中,大多数场景下主要与开发环境、测试环境、准生产环境、生产环境相关。软件产品的研发过程中,很多情况下UAT环境与准生产环境使用的是同一套环境,没有严格的区分,小的企业或项目甚至都没有UAT环境和准生产环境。而一个软件产品的开发通常经历开发、测试、上线三个阶段后,才开始进入线上运维与运营,所以,开发环境、测试环境、生产环境通常都会具备。理解了这些运行环境之间的差异,持续交付流程在整个产品研发过程中的意义也就容易理解了。
从持续集成到持续交付的流程推进,背后是自动化集成测试、自动化配置管理、自动化基础设施管理三方面能力的极大提升。安全作为集成测试、配置管理、基础设施管理其中的一个部分,也贯穿着持续交付流程的始终。
三、持续部署基本概念
3.1 持续部署的含义
持续部署的含义是在持续交付的基础上,将已通过客户验收确认产品版本发布到生产环境的过程,如下图所示:
从上图来看,持续部署的流程比较简单,仅仅是从UAT环境向生产环境推进了一步。
3.2 持续部署包含的内容
因为生产环境的稳定性要求,持续部署的过程至少应该包含以下三个部分:
3.2.1 部署升级
将制品仓库中通过用户验收确认的产品版本,通过技术评审、流程审批、自动更新等一系列操作部署到生产环境中,完成制品的替换升级。在真实的升级过程中,部署升级并非替换一个制品文件那样简单。常常是同一个制品文件同时部署在多台服务器上,升级时每个文件都需要更新。除了制品文件外,诸多与应用配置相关的参数项,如网络端口、系统文件目录权限、跨区域网络访问的链路路由等都需要在升级时同时操作。为保证部署升级的可靠性,多数企业采用蓝绿部署、灰度部署、滚动更新等方式来避免部署升级操作带来的业务中断风险。
3.2.2 部署验证
为了保障部署结果的一致性和生产环境的可用性,通常在部署完成后做阶段性验证,同时也是为了尽早地发现问题,尽早解决,减少部署升级对业务产生的影响。
3.2.3 部署监控
验证完成后,为了持续跟踪线上系统的运行状态,还需要在升级后的一段时间内对生产环境进行监控,以防止遗漏、未发现的问题对业务生产过程产生影响。
3.3 持续部署过程中不同角色的操作内容
完成了生产环境的自动化发布后,DevSecOps平台的黄金管道则完成Dev研发段全流程贯穿。在这个流程中,除了上文中提及的自动化集成测试、自动化配置管理、自动化基础设施管理等能力的自动化之外,还有很多细节性的流程与配置管理上的运营,才会产生持续部署的结果。
下图所示为持续部署流程中各个不同角色视角下的全流程操作示意图,通过这张图,更利于读者理解其背后涉及的知识点和技术方向。
3.3.1 持续部署不同角色操作示意图
3.3.2 持续部署不同角色操作内容说明
从上图中大家可以看到,在黄金管道的两端分布着平台管理员、开发人员和用户。平台管理员维护DevSecOps平台,开发人员研发产品,用户使用产品。从产品规划到产品可使用的自动化生产过程是DevSecOps平台运维管理和持续运营之上的持续化生产能力。
四、其他相关概念
4.1 概述
在持续交付与持续部署阶段,除了上述的持续交付、持续部署、运行环境的基本概念外,还有以下概念需要了解,以便于大家从技术层面理解后续DevSecOps平台能力的实现。
4.2 配置管理
相比传统的软件开发模型,在现代化的DevSecOps开发中,配置管理尤为重要,甚至可以说,没有配置管理就没有DevSecOps的安全自动化的实现。这里讨论的配置管理主要是指围绕软件开发生命周期的配置管理,除了传统意义上的代码仓库、版本控制、缺陷管理等基础的配置基线外,还包括需求管理、软件设计、测试、部署、运维等过程的流程化和线上化管理动作的配置管理,期望以配置文件管理的方式统一集中管控同一软件在不同环境下(开发、测试、生产)的自动化配置,达到开发或部署过程可控且可重复的目的,其典型的技术表现为DevOps工具和流程管理的线上化、基础设施即代码的技术实现,如下图所示:
将基础设施资源(如云主机、云数据库、云存储等)、应用程序文件(如应用安装包、数据库脚本、配置文件)、模板库(如主机镜像、Docker镜像、配置文件模板)以配置管理的方式,通过代码操作为持续交付、持续部署过程的自动化提供基础。这些内容均属于配置管理的内容。
4.3 镜像管理
镜像管理是随着IT技术的发展而逐渐提出来的概念,最初的镜像是操作系统镜像;后来出现虚拟化之后,将安装好的虚拟机克隆出来形成主机镜像;现在,随着云原生和容器化技术的发展,出现了容器镜像。基于这些镜像,在持续交付、持续部署过程中生成可运行的实例,达到类似"一次构建,多次部署"的目的。
为了保证这些镜像的可用性,需要持续性地对镜像进行管理和维护。同时,在持续交付、持续部署过程中,同一个镜像无法满足不同场景下的使用,于是出现了镜像配置文件分离。通过外置配置文件的方式,来满足同一个镜像无法满足不同场景下的使用。在不断变化的过程中,逐渐出现了镜像注册表的概念,利用镜像注册表充当镜像仓库,在持续交付、持续部署过程中进行编排和调度。如下图所示为镜像管理在持续交付和持续部署过程的使用关系。
好了,本次内容就分享到这,欢迎大家关注《DevSecOps》专栏,后续会继续输出相关内容文章。如果有帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!