vivo 制品管理在 CICD 落地实践

vivo,cicd · 浏览次数 : 0

小编点评

**制品管理流程** 1. **权限控制制品权限控制** - 确保制品在构建、存储、分发和部署等环节中,仅有经过授权的人员才能访问、修改、上传和下载制品。 2. **身份验证+角色控制** - 通过单点登录(SSO)确定用户身份信息,项目成员才能访问、修改、上传和下载制品; -为了保障生产环境的稳定性和安全性,经过管理员审批的制品才能部署到线上环境。 3. **项目隔离** -为了确保项目之间资源不会互相干扰,保证项目制品的安全性,项目间的制品是隔离的,项目内的制品只能在项目中使用。 4. **制品安全扫描** - 在制品安全扫描之前,进行源代码扫描、构建扫描、制品扫描等全方位安全扫描,以发现并防止安全漏洞。 5. **组件准入规则** - 能够提前规避问题,保障整个应用程序或系统的安全性和可靠性,是软件开发和部署过程中必不可少的一环。 6. **组件准入** - 按照二方或三方依赖的准入规则,确保依赖是否安全。 7. **漏洞知识库** - 从公共仓库拉取的三方依赖/内部上传的二方依赖经过安全扫描后,安全的二/三方依赖会进入安全依赖知识库。 8. **制品正反向溯源** - 通过制品正反向溯源,确定组件历史版本和演变过程,追踪代码质量、安全性、改变历程等信息,帮助开发人员和系统管理员进行版本控制和漏洞检查,确保组件库中的所有组件都是计划中要使用的版本。

正文

作者:vivo 互联网效能平台团队 - Chen Lingling

在DevOps实践中,制品管理是一个重要的组成部分,它可以帮助团队快速交付高质量、高可靠性的软件,本文将介绍在 DevOps 领域,vivo CICD是如何进行管理制品,阐述了 CICD 制品管理的演进过程与落地实践,希望能为读者提供一些实践经验和思路。

一、前言

随着软件开发的不断发展,DevOps已经成为了一种流行的软件开发实践方式。在DevOps实践中,制品管理是一个重要的组成部分,它可以帮助团队快速交付高质量、高可靠性的软件,本文将介绍vivo制品管理在CICD的演进过程与落地实践,希望能为读者提供一些实践经验和思路。

名称解释

制品:在广义上指软件开发过程中生成的各种产物,包括软件代码、文档、报告、测试结果等,在狭义上,指软件开发过程中生成的最终产物,如编译产物、打包产物、镜像等。

制品库:制品库即管理制品的中央仓库,用来存储和管理不同格式的软件制品,如源代码,编译后的程序,镜像,配置文件,第三方库和依赖,版本信息等。制品库一般包含存储,版本管理,权限控制,安全扫描,依赖分析等功能,是一种企业处理软件开发过程中产生的所有包类型的标准化方式。

二、vivo CICD制品管理演进

随着DevOps行业的蓬勃发展,行业内越来越关注制品能力的建设;在不断的实践摸索中,vivo CICD制品管理能力也越来越完善,vivo CICD的制品管理发展一共经历了4个阶段,包括手工管理阶段、脚本管理阶段、平台管理 1.0 阶段和平台管理 2.0 阶段。

图片

 

  • 手工管理阶段:本地构建制品,手动上传到部署机器,进行手动部署。纯手工时代,需要耗费大量人力和时间,出错率高,无法保证一致性和可重复性。

  • 脚本管理阶段:使用脚本化管理工具自动化构建、部署过程。通过Jenkins构建制品,上传到文件存储器,shell脚本从文件存储器(FTP)下载后进行部署。这一阶段初步实现构建、部署过程的自动化,并且保证了一致性和可重复性,但需要手动编写脚本,维护成本较高。

  • 平台管理1.0阶段:基于Jenkins ,Spinnaker自研CICD平台,加速软件的构建、测试、部署和发布过程  。在这个阶段流水线比较完善,实现构建、测试、部署过程自动化,并且可以自动化地触发测试和部署操作,从而提高软件交付的速度和质量;但是制品管理能力有限,仅在流水线范围内保证一致性和可重复性。

  • 平台管理2.0阶段:随着平台能力全面发展,为了提高研发效率和软件质量,降低运维成本,我们进一步完善了制品管理能力,实现制品的版本控制、存储、晋级和安全管理等,从而提高软件开发效率、简化软件交付流程、提高软件交付质量和可靠性。

当前CICD 制品管理处在平台管理2.0阶段,这一阶段制品管理具有如下优势

  1. 多类型制品支持:制品库支持一个项目同时存在Generic、Maven、NPM、PyPI、Docker、Helm等多种常见类型,满足多技术栈研发团队的诉求。

  2. 制品统一管理:将软件研发过程中所有制品进行版本管理、集成、协同和发布管理等,从而提高研发效率和质量,支持持续交付和DevOps实践,提升企业竞争力和创新能力。

  3. 制品溯源追踪:基于制品元数据和准入准出规则,进行制品晋级,以制品维度记录从需求到发布的过程数据,实现需求、编码、构建、测试、质量和部署全生命周期过程的强管控,实现可信追溯与安全审计。

  4. 制品安全扫描:检测制品中的潜在安全漏洞和风险,提高系统和应用程序的安全性和可靠性,避免信息泄露和恶意攻击,从而保护企业数字资产的安全。

  5. 降低运维成本:统一管理制品,减少重复建设,降低运维、研发,测试沟通成本。

  6. 制品极速分发:支持多地数据中心上传下载,实现多地数据中心集群部署。

制品管理是软件开发和交付过程中不可或缺的环节,通过制品管理,可以提高软件交付效率、质量和可靠性,降低成本和风险,促进团队协作和沟通,提高管理效率和决策能力,从而提高企业的生产力和竞争力。

图片

三、vivo CICD制品管理介绍

3.1 vivo CICD 制品管理概况

1)目前制品库支持:

  • 元数据管理:对制品的属性信息进行有效管理和保护,包括编译产生的元数据,用户自定义的元数据,cicd平台生成的元数据等。

  • 制品统一管理:统一管理制品生命周期,提供存储,溯源追踪,上传下载,版本管理,权限控制,回收,部署等多项功能。

  • 制品晋级:不同环境中的配置和参数可能会有所不同,对制品进行适当的修改和定制化,以满足不同环境的需求,也是针对不同需求设置制品准入门禁。

  • 极速分发:灵活地适应不同的部署需求和架构模式,将制品快速、可靠地分发到各地数据中心。

  • 安全扫描:对制品进行全方位的漏洞,合规扫描(包含源代码,依赖,文件,镜像等),识别制品安全等级,提前规避问题。

2)制品生命周期

图片

3)制品在研发流程中所起的作用

对于CICD流水线而言,制品起到一个承上启下的关键作用,它是持续集成CI的终点,也是持续交付CD的起点,是研发流程关键组成部分。

图片

3.2 制品管理系统架构

图片

3.3 核心功能介绍

3.3.1 制品统一管理

制品统一管理,顾名思义在软件研发和部署过程中,对产生的各种制品进行整体的统一管理。主要包含元数据管理,统一存储,制品生成,制品晋级,制品部署,制品扫描,制品老化,权限管控几大功能的管理。

(1)元数据管理

制品元数据是指对制品本身的描述和补充信息,与制品密切相关,是制品管理的一个重要部分。

目前管理的元数据有:

制品名称(MD5/镜像标签)、版本、类型、制品大小、来源信息、源代码、可部署环境、存储地址、扫描报告、依赖信息、制品作者、描述、老化日期,老化状态等。

通过制品元数据对制品有了全方位了解,可以帮助研发,测试,运维等角色快速定位识别制品、进行版本回溯,追踪问题的引入,及时修复安全漏洞等。

(2)统一存储

按照使用场景,制品一般分为三类,统一管理存储在对应的存储器上。

图片

(3)制品生成

平台制品的来源分为三类类:手动上传制品,流水线构建、公网引入

图片

(4)制品晋级

  • 制品晋级流程

在整个研发流程中,研发团队一般都有开发,测试,预发,压测,生产环境,而对于不同环境可部署条件是不一样的,即不同的环境对于制品有不同的准入门禁,制品需要通过晋级来达到准入标准。

图片

经过代码扫描,编译后制品生成 → 部署开发环境 → 经过安全扫描 → 部署测试环境 → 测试通过,并分发到线上仓库之后 → 部署预发环境 → 部署预发后,验收通过,并提交上线审批工单之后部署生产环境。

目前制品晋级规则比较简单,为了帮助研发团队有效且直观地区分制品版本的成熟度情况,提高交付效率和安全性,后续将支持自定义制品等级和晋级规则。

  • 制品分发

在制品晋级的过程中,制品等级越高,越需要支持跨网络/数据中心使用,制品分发将生成的制品快速、准确和可靠地分发出去,供不同地区开发人员或用户使用,为企业提供更为高效和便捷的全球化业务支持。

图片

(5)制品部署

制品部署是将软件制品部署到各个环境的过程,制品部署是软件开发的最后一步,也是最关键的一步,如果部署失败,将会导致业务中断或严重故障,保障部署制品版本正确至关重要。 平台目前有支持三种方式部署:构建部署一键运行,制品库选择制品,选择上线工单部署。

  • 构建部署一键运行:用户选择代码版本进行构建,构建后制品直接部署到对应环境。

  • 制品库选择制品:选择历史制品进行部署,为了保障用户选择到正确的制品版本,制品选择会展示元数据方便用户核对,且线上环境只能选已晋级制品进行部署。

  • 选择上线工单部署:线上部署前需要提交上线工单,经过管理员、安全管理员,执行人等审批通过之后,选择工单部署对应制品至线上环境。

(6)制品扫描

制品包含的是在应用程序开发过程中产生的各种文件,从源代码到编译后的二进制文件、测试结果和部署配置文件,甚至到生产环境中使用的数据。一旦这些制品受到攻击或被窃取,会严重影响整个应用程序或系统的安全性和可靠性,安全扫描是制品管理中重要一环,有助于保障系统稳定性和安全性,平台对制品进行全方位的漏洞/合规扫描(包含源代码,依赖,文件,镜像等),提前识别制品安全等级,提前规避问题。这一部分将在3.2中重点介绍。

(7)制品老化

合理制定制品生命周期管理策略,定期清除无效制品,减少存储空间占用,可以提高系统性能,提供更安全、稳定、整洁的制品库。

  • 自动化清理:制品生成后,平台会根据保留策略计算制品的销毁时间,然后根据制品销毁时间,自动定时清理过期制品。

  • 保留策略:一般情况下,线下制品保留60天,线上制品保留90天,正在部署或者部署中制品不会被清理;支持定制化保留时间,对于迭代频繁或自动化程度高的项目,制品数量繁多,可以缩短制品保留时间,而像一些稳定的运维系统,可以延长保留时间。

  • 清理白名单:对于一些特殊制品或项目,不能随意清理,可以申请清理白名单;白名单支持制品和项目两个维度;特殊制品可以申请清理白名单,延长保留时间或永不清理,项目也可以按项目维度申请白名单,为项目下所有制品申请清理白名单。

  • 恢复策略:直接清理制品,具有一定的风险性,平台支持恢复老化制品;清理的制品,短期内平台会进行备份,已清理制品平台支持基于制品元数据(代码信息,编译环境等)重新生成制品,从而保障制品安全性。

  • 标准化流程:为保证不清理掉与业务相关的重要信息或数据,对业务产生不利影响,必须按照规范的流程进行清理和记录,以下是整个清理流程:

图片

(8)权限控制

制品权限控制是制品管理流程中非常重要的一部分,它可以确保制品在构建、存储、分发和部署等环节中,仅有经过授权的人员才能访问、修改、上传和下载制品。通过制品权限控制,大大降低公司潜在安全风险,防止机密信息和敏感数据的泄漏。

  • 身份验证+角色控制:通过单点登录(SSO)确定用户身份信息,项目成员才能访问、修改、上传和下载制品;同时为了保障生产环境的稳定性和安全性,经过管理员审批的制品才能部署到线上环境。

  • 项目隔离:为了确保项目之间资源不会互相干扰,保证项目制品的安全性,项目间的制品是隔离的,项目内的制品只能在项目中使用。

  • 制品权限控制:针对制品进行单独的权限分配(设置制品可操作空间、可操作用户/用户组)。

3.3.2 制品安全扫描

(1)制品存在哪些安全风险

  • 制品/依赖组件存在安全漏洞:未经过扫描的制品,制品或者制品中的依赖组件存在一些安全漏洞,黑客可以利用这些漏洞入侵系统。

  • 制品中可能存在恶意代码:未经过扫描的制品, 可能存在恶意代码,部署这类制品会使整个系统处于风险之中。

  • 制品中可能存在滥用SQL:滥用SQL带来SQL注入风险,敏感数据泄露,逻辑漏洞等风险。

  • 制品中敏感文件存在泄露风险:制品中存在一些敏感/机密数据,若没有进行适当的加密或访问控制等措施,将使这些机密信息被黑客窃取或篡改。

制品安全扫描是提前发现和规避这些风险的有效措施,通过制品安全扫描保障应用程序安全,减少安全风险造成的损失,保护公司机密数据。

(2)全方位安全扫描

平台对制品进行全方位安全扫描,从源码→构建→制品→部署全流程进行扫描和管控,保障系统的安全性。

图片

以上各种扫描(源码扫描,构建扫描,制品扫描)都会形成扫描报告,扫描结果也会记入制品元数据,作为制品的安全属性和制品晋级准入条件,进行部署管控,用户也可以在制品库查看制品的安全性与扫描报告。部署不安全制品时,线上线下环境会采取不同措施进行干预:

  • 线下环境部署不安全制品,提示安全风险,进行处理指导,跟踪处理进展。

  • 线上环境部署不安全制品,一般情况下,平台会自动检测制品安全性,不允许不安全制品上传;如果特殊情况必须上线,必须提前分析上线风险以及问题处理措施,经过安全团队审批,才能上线。

(3)组件准入规则

组件准入规则能够提前规避问题,保障整个应用程序或系统的安全性和可靠性,是软件开发和部署过程中必不可少的一环。组件准入分为二方依赖和三方依赖的准入,下图详细展示了组件准入规则。

图片

图中名词解释:

  • 内网中央仓库:存储依赖仓库,包括二方依赖,三方依赖。

  • 安全扫描:扫描依赖,判断依赖是否安全。

  • 安全依赖知识库:从公共仓库拉取的三方依赖/内部上传的二方依赖经过安全扫描后,安全的二/三方依赖会进入安全依赖知识库。

  • 漏洞知识库:从公共仓库拉取的三方依赖/内部上传的二方依赖都经过安全扫描后,不安全的二/三方依赖会进入漏洞知识库;同时平台会定时从公共漏洞库拉取漏洞信息。

1)依赖包的拉取:本地编译或平台构建需要拉取某个依赖包时,平台依据安全依赖/漏洞知识库判断依赖是否安全,安全的依赖才允许下载;若某个依赖在安全依赖/漏洞知识库中不存在,会从公共仓库拉取进行安全扫描,确定是安全的依赖后才允许下载。

2)二方依赖推送内网中央仓库:本地二方依赖禁止推送,只能通过平台构建生成二方依赖;二方依赖经过安全扫描确定为安全依赖后进入安全依赖知识库并推送到内网中央仓库,不安全依赖记录到漏洞知识库。

(4)依赖正反向溯源

图片

上图展示的是制品对应的简易依赖树,以及每个树节点存储的信息。

图片

通过制品正反向溯源,确定组件历史版本和演变过程,追踪代码质量、安全性、改变历程等信息,帮助开发人员和系统管理员进行版本控制和漏洞检查,确保组件库中的所有组件都是计划中要使用的版本。

四、总结与展望

制品管理是软件开发和交付过程中不可或缺的环节,vivo CICD的制品管理经过四版的演进,从多品类支持,制品生成、制品晋级、制品部署、制品扫描,制品老化,制品管控等方面完善了制品管理能力,提高了软件研发效率、软件交付质量和可靠性、简化了软件交付流程、降低了运维成本。

目前vivo CICD的制品管理是一个相对完善的制品管理平台,但制品管理作为软件开发和部署过程中重要的组成部分,在未来会走向更加智能化、集成化、安全化和规范化的方向,在制品管理的道路上我们还需不断实践探索:

  1. 智能化方面:随着人工智能的发展,人工智能技术越来越成熟,后续将借助机器学习等技术,智能识别制品安全情况,提供智能分析,智能推荐等功能。

  2. 集成化方面:制品库与DevOps、CICD关系将会越来越紧密,后续将在制品管理中集成CICD能力,例如用户可以在查看某个制品的同时进行一键部署。

  3. 安全化方面:随着软件和网络安全威胁的不断增加,制品库安全扫描的重要性将会日益凸显。为增加安全性能和提高交付效率,进行安全左移,例如将扫描前置到开发过程中。

  4. 规划化方面:引入更多的规范化策略和标准,研究制定更加严谨的制品管理流程,防止因为制品管理的缺失导致安全问题,提高交付效率。

制品管理还需要结合实际场景进行探索和创新,寻求更加智能化、灵活化和安全的实现方式,推动整个软件开发生态的不断发展和进步。

与vivo 制品管理在 CICD 落地实践相似的内容:

vivo 制品管理在 CICD 落地实践

本文将介绍在DevOps领域,vivo CICD是如何进行管理制品,阐述了CICD制品管理的演进过程与落地实践,希望能为读者提供一些实践经验和思路。

基于 Three.js 的 3D 模型加载优化

作为一个3D的项目,从用户打开页面到最终模型的渲染加载的时间也会比普通的H5项目要更长一些,从而造成大量的用户流失。为了提升首屏加载的转化率,需要尽可能的降低loading的时间。这里就分享一些我们在模型加载优化方面的心得。

博客园与vivo首度合作:蓝河技术沙龙招募开启,邀您共探Rust与AI新时代

今年6月,我们争取到一次非常难得的与vivo的合作机会——为vivo蓝河操作系统技术沙龙招募开发者参会,在园子商业化的关键时期,这个合作机遇有了更加重要的意义。 招募开发者线下参会很难,而且这次人数众多需要招募300人,这是一个非常大的挑战,我们会集中全园推广资源努力争取,如果您对这个活动感兴趣,期

HBase 在统一内容平台业务的优化实践

HBase是一款开源高可靠性、扩展性、高性能和灵活性的分布式非关系型数据库,本文围绕数据库选型以及使用HBase的痛点展开,从四个方面对HBase的使用进行优化,取得了一些不错效果。

数据特征采样在 MySQL 同步一致性校验中的实践

作者:vivo 互联网存储研发团队 - Shang Yongxing 本文介绍了当前DTS应用中,MySQL数据同步使用到的数据一致性校验工具,并对它的实现思路进行分享。 一、背景 在 MySQL 的使用过程中,经常会因为如集群拆分、数据传输、数据聚合等原因产生流动和数据复制。而在通常的数据复制过程

海量数据处理利器 Roaring BitMap 原理介绍

本文结合个人理解梳理了BitMap及Roaring BitMap的原理及使用,分别主要介绍了Roaring BitMap的存储方式及三种container类型及Java中Roaring BitMap相关API使用。

TiKV 源码分析之 PointGet

作者:来自 vivo 互联网存储研发团队-Guo Xiang 本文介绍了TiDB中最基本的PointGet算子在存储层TiKV中的执行流程。 一、背景介绍 TiDB是一款具有HTAP能力(同时支持在线事务处理与在线分析处理 )的融合型分布式数据库产品,具备水平扩容或者缩容等重要特性。TiDB 采用多

前端生成海报图技术选型与问题解决

本篇文章主要聚焦海报图分享这个形式,探讨纯前端在H5&小程序内,合成海报到下载到本地、分享至社交平台整个流程中可能遇到的问题,以及如何解决。

分布式任务调度内的 MySQL 分页查询优化

本文主要通过图示介绍了用主键进行分片查询的过程,介绍了主键分页查询存在SQL性能问题,如何去创建高效的索引去优化主键分页查询的SQL性能问题。对于数据分布不均如何发现,提供了一些SQL查询案例来进行参考,对MySQL Index Condition Pushdown优化算法做了一些简单介绍。

有隙可乘 - Android 序列化漏洞分析实战

本文主要描述了FileProvider,startAnyWhere实现,Parcel不对称漏洞以及这三者结合产生的漏洞利用实战,另外阐述了漏洞利用的影响和修复预防措施,这个漏洞波及了几乎所有的Android手机,希望能带给读者提供一些经验和启发。