制品库是什么?
谈一个东西,就一定要讲历史,讲背景。早期软件开发多为瀑布模型,真正开发前需要做一大堆工作,例如可行性研究、项目实施计划、需求分析、概要设计等等,还要进行大量文档编写,每个步骤环环相扣,像瀑布一样,有序进行,下一个步骤依赖于前面步骤的文档输出,可以说瀑布模型是文档驱动。
但是近几年,由于互联网的新起,互联网具备业务变化快,黄金时间短,早前的瀑布模型开发模式,周期长,等你前面都研究好了,这个风口早就过去了。所以这个时候敏捷模型开始出现,目的让软件发布周期变短,更快的响应业务变化,从而占领市场。快就容易导致乱,所以这个时候 DevOps 开始出现,我用一句话简单概括 DevOps,就是制定一些标准规范,并且让它们自动跑起来。制定规范,就是为了防止人为出错,解决掉我们所说的乱的问题。自动跑起来,就是能缩短工程师们的时间,让工程师只聚焦于业务,也就可以让我们的开发周期缩短。实际上,就是保证了我们软件研发的稳(减少出错)、准(自动化)、狠(快速迭代)。
制品库就是 DevOps 里面重要的一个组成部分。制品库,顾名思义,就是存放制品的仓库。那什么是制品呢?制品就是软件开发过程中的产物,可以是代码编译产物,也可以是构建脚本等等。大多数人的理解,软件开发过程中,代码编写应该是更为重要的一个环节,但实际上无论是瀑布模型,还是 DevOps 中代码编写环节都只是其中的一小段过程。如下图:
这个图是最佳实践 SDLC 中标准的 DevOps 循环图。可以看到二进制文件在多个流程中都出现,占据了 3/4DevOps 过程。可见一个好的制品库,可以发挥出作用的重要性。那么为什么需要一个制品库管理软件,JFrog 曾给出八大理由:
这里我进行了的简单总结,详细可以参考 JFrog 文章 DevOps: 8 Reasons for DevOps to use a Binary Repository Manager[1]
单一可信源:统一制品仓库,方便管理。像大型企业都会有自己的内部仓库,如腾讯的腾讯软件源。
SBOM(软件物料清单):表明软件的组成成分。软件行业流行开源,很多软件都会用到开源软件,但是又对 license 不清楚,有了 SBOM,可以避免侵权问题,同时也因为有了清单也可以及时发现问题组件,规避风险。
远程仓库代理:软件依赖于开源软件,需要从各类依赖源中央仓库拉取构件,通过远程仓库代理,可以加速软件拉取速度,进而加快构建过程。
一次构建,任意推广:保证构件的不变性,减少不同环境的相同版本构建。多次构建,就有可能产生差异,这样就会导致如测试的版本与真实部署的版本不一致,从而引发生产问题。
云原生:云原生是一个新兴起的技术,现在也是大势所趋。制品库,可以提供 OCI 仓库,帮助企业快速上云。
软件供应链保护:软件供应链攻击被 Gartner 列为 2022 年三大安全问题之一,根据《2022 年安全报告》显示,2021 年全球软件供应链攻击同比增长了 650%。可见它的严重性和广泛性。什么是软件供应链攻击呢,举个例子:你开发的一款软件,依赖于名字为 AaA 组件,不法分子抢注名字为 Aaa 的组件,这是个含有木马的组件,这个时候由于开发不小心将依赖组件的名字打错成 Aaa,则会下载木马软件。如果你的软件是公司里面的基础组件,那影响面就更广,导致全公司的软件都被感染,这就是一种简单的软件供应链攻击的方式。所以软件供应链保护至关重要。
连接全局工具:开放更多的接口,方便更多的自动化接入。
无限扩展:随着企业的快速发展,业务的增多和快速变化,越来越多的软件,和越来越多的迭代,所产生的构件也会快速增多,存储构件的软件也需要可以无限扩展。
现状
计算机起源于上世纪的 40 年代,发源于美国。所以先进的计算机技术和软件也大多引进国外。包括很多先进的开发理念和核心的基础软件都是来源于美国,DevOps 和制品库也不例外。主流的制品库软件,Nexus Repository,JFrog Artifactory 也都来自于国外。如下图:
国内新势力
随着 DevOps 行业的发展,国内制品库产品也逐步兴起。比如阿里的云效制品库 Packages、coding 的 WePack、华为云的 CloudRelease、嘉为的 CPack 等等。从功能上来看,coding 的 WePack 和嘉为的 CPack 功能更加全面,毕竟 coding 和嘉为是 DevOps 厂商,靠产品吃饭的,而几大云厂商的制品库则简单了许多,只具备少量包类型和基础功能。
以上产品都是商业化产品。据我所知,国内开源的目前只有腾讯的蓝盾制品库,国外的有 Nexus repository OSS,如果还有其他的制品库也开源,欢迎留言告知。使用商业化软件,总会受限,或 license,或问题反馈,无法协同共建等等问题。开源能解决上述问题,所以这也是为什么软件行业发展的比较快,跟崇尚开源有莫大的关系。
蓝盾制品库
BkRepo(blueking repository)是腾讯蓝鲸旗下蓝盾(持续集成平台)孵化出的一款产品。根据《中国 DevOps 现状调查报告(2022)》,报告对 DevOps 平台类工具市场进行了深度调研,蓝鲸 DevOps 荣登 DevOps 平台类工具市场选择占比第一。
BkRepo 支持了腾讯内部大量业务,PB 级存储,日归档拉取数量达百万级别,稳定性高达 99.99%。是在经过腾讯内部大量验证和最佳实践出来的制品库产品。现已开源到社区,开源地址https://github.com/Tencent/bk-ci。在 bk-ci 下的 storage 模块,快速体验https://hub.docker.com/r/bkrepo/bkrepo。作为国产开源软件的优势:
自主研发,产权可控。
问题反馈,响应及时。
软件国产化是趋势,避免被人卡脖子。
BkRepo 和几款主流的通用制品库对比:
可以看到蓝盾制品库基本与 JFrog Artifatory 功能是对齐的,比 Nexus Repository OSS 多了许多功能。所以 BkRepo 应该是能满足绝大多数企业的,再者论制品规模,复杂度比腾讯还大的企业应该很少。
在通用包类型的支持上,BkRepo 相比较是少的,但是也支持目前比较广泛使用的语言的仓库,如 Generic(二进制仓库)、Maven、npm、oci(云原生仓库,如 docker、helm 等)、pypi、rpm、nuget、composer 等。未来还会支持更多的仓库类型。
写在最后
一道佳肴,食材是关键,一篇好的文章,干货是关键。我对自己的期望是小溪出品,必是精品。希望自己的文章能给他人带来收获。
References
[1] DevOps: 8 Reasons for DevOps to use a Binary Repository Manager: https://jfrog.com/whitepaper/devops-8-reasons-for-devops-to-use-a-binary-repository-manager/
版权声明: 本文为 InfoQ 作者【雨后小溪】的原创文章。
原文链接:【http://xie.infoq.cn/article/8b4503d845b837eba197e6fe6】。文章转载请联系作者。
评论