在DevOps实践中,制品库可以说是至关重要的组件。一个可靠的制品库在DevOps流程中往往可以帮助企业解决许多安全和版本管控方面的问题。本文将以两个问题为切入口,带您深入了解制品库的那些事儿。
问题1:DevOps平台里的制品库有什么用?
问题2:DevOps实践中,有必要用制品库吗?
DevOps平台里的制品库有什么用?
制品&制品库
不同开发语言的源码编译构建打包的二进制文件,例如Java JAR,WAR,EAR格式;Android AAR格式;其他软件包格式,例如NuGet软件包,Ruby gems,NPM软件包;Docker镜像和Helm charts;普通ZIP或.tar.gz、dmg等压缩文件;可执行文件格式,例如.exe 或.sh 文件,以及Android APK、Apple IPA等各种安装程序格式。
使用场景上,分为三类:
制品仓库
存放流水线构建的通用文件类型的仓库,以及部署时拉取文件的仓库:Generic——例如普通ZIP或.tar.gz、dmg等压缩文件;可执行文件格式,例如.exe 或.sh 文件,以及Android APK、Apple IPA等各种安装程序格式。
镜像仓库
通过k8s 服务部署应用时,需要从镜像仓库拉取镜像:Docker,Docker镜像,Helm,Helm charts。
依赖仓库
各种开发语言的依赖包管理仓库,通常会搭建nexus私服来通过代理拉取各个中央仓库的开源依赖包,也叫三方包;由企业公共组件开发团队或合作公司提供的依赖包或SDK,也叫二方包:
- Maven——Java JAR,WAR,EAR格式;Android AAR格式(包含Gradle、Ivy方式)
- NPM——NodeJS包
- PyPI——Python包
- Go——golang包
- Composer——PHP包
- NuGet——.NET包
- RPM——rpm和yum包
- Conan——C/C++语言的包
- CocoaPods——iOS包
其中maven和npm是当前使用比较多的类型,还有其他类型语言的依赖包管理仓库,这里就不一一列举。
再来看看DevOps以及DevSecOps的理念和研发过程,就可以看到制品库在其中起到的重任。DevOps将开发、测试、运维拉到同一战线,使产品持续开发、持续集成、持续测试、持续部署、持续监控,非常频繁地发布新版本。
DevSecOps是一种遵循DevOps的思想,并将安全无缝集成到其中的研发模式。在国内,央国企、泛金融、运营商、通信、互联网等头部行业,已经开始在实践DevSecOps。
DevOps&DevSecOps中的安全风险
安全隐患明显:
第三方依赖包下载管理混乱,缺乏安全漏洞扫描和安全准入设置,极易引入漏洞,造成生产事故。
制品管理混乱:
对不同类型制品缺乏统一管理平台,冗余制品无法及时清理造成资源管理混乱。
无法溯源管理:
缺乏对开发、构建、测试和部署等制品全生命周期的过程管控,无法历史溯源。
服务中断风险:
缺少高可用时,存在因故障引起服务中断的风险,影响研发和运维工作。
运维成本高昂:
缺乏集群部署,存在重复建设的问题,维护成本高,且无法进行多地区节点的制品同步分发。
一个合格的制品库,除了要支持常用的制品类型的存储功能以外,还必须提供仓库代理、版本管理、访问控制、安全扫描、依赖分析、制品同步等重要功能,是一种企业处理软件开发过程中产生的所有包类型的标准化方式。实现对制品全生命周期的流程、风险、权限和质量等多维度管控,支撑企业在开发、构建、测试和部署等阶段对制品的管理和使用,可以大幅提升软件工程的管控与效能。
DevOps实践中制品库的必要性?
典型的软件开发会涉及到开发,构建,测试,部署等环节。在这个过程中,依赖组件如何确保安全,中间制品如何规范管理,交付物如何准确投产,诸如此类的问题往往会成为整个DevOps流转的阻碍。可靠的制品库在DevOps流程中往往可以帮助企业解决许多安全和版本管控方面的问题。
在开发构建阶段,因技术所需,往往会“依赖”大量外部的依赖组件。在这个时候既要费时费力下载各种外部依赖文件;还要防止下载的开源组件有漏洞;有些组件可能还有授权大坑,有法律风险;因此,如何处理依赖库就成为了开发构建中的大难题。
在构建完之后往往会将制品存入制品库中进行集中管理,在这个时候开发无法对库里制品的质量状况了如指掌;运维难以确定本次可发布的版本,如果有未经测试的版本上了生产环境,或者是老版本覆盖了新版本,酿成的都是大事故。
最后交付的制品,在部署实施的时候会有许多要求:
- 首先要保证传输的介质可靠和安全;
- 兼顾版本的管理,哪个版本是最新的?哪个是临时版本?
- 万一制品库宕机,按时投产就成了大问题;
- 很多情况下,企业开发和生产处于异地隔离,那么如果制品异地传输慢,大规模部署就只能干着急;
- 权限管控方面,如果制品库无法做到细粒度的权限管控,权限管控不严,制品被篡改,那将遗患无穷。
嘉为蓝鲸CPack制品管理
CPack制品管理平台是一款国产自研的企业级制品库,专注于嘉为蓝鲸DevOps解决方案的应用开发域。CPack不仅支持多种常见制品库类型,而且支持仓库代理功能,解决不同仓库管理复杂的问题;通过版本管理及元数据来管理制品全生命周期;提供安全扫描与依赖分析进行风险把控;拥有精细化的权限管控与监控能力,保障数字资产安全;具备制品同步分发能力,实现多数据中心的数据同步。
多类型制品支持:
支持Generic、Maven、NPM、PYPI、Docker、Helm等多种常见类型,支撑多种不同语言的研发团队使用。
制品统一管理:
提供代理功能,通过设置多个代理源实现本地仓库、私有仓库和中央仓库的制品统一管理,打造企业唯一可信源。
制品溯源追踪:
基于制品元数据和准入准出规则,进行制品晋级,以制品维度记录从需求到发布的过程数据,实现需求、编码、构建、测试、质量和部署全生命周期过程的强管控,实现可信追溯与安全审计。
制品安全扫描:
提供自定义扫描计划和质量规则,满足企业对开源组件的漏洞安全和许可证合规性方面的检测管控要求。
保障服务稳定:
支持集群部署和健康监控,为企业提供稳定的性能服务。
降低运维成本:
多地数据中心集群方式部署,支持横向多节点扩展,以灵活的同步策略应对高并发下载场景。
使用场景
- 单环境:私服依赖仓库+项目隔离的制品仓库+制品晋级+部署发布
- 多地中心:CI流水线+多节点制品库+同步分发+应用发布自动化+部署
- 私服依赖库:DMZ隔离区+多级代理