在企业软件研发体系中,代码库、制品库和 CBB 管理的其实是三个不同层级的问题:代码库解决源代码如何存储和协作,制品库解决构建产物如何保存、分发和使用,而 CBB 进一步解决一个软件能力如何被识别、授权、复用、变更和持续治理。
因此,CBB 并不是一种新的代码仓库,也不是对制品库的替代。更准确地说,它是在已有代码、制品和研发流程之上增加的一层“构件治理模型”,目的是让一个分散在多个仓库、多个制品路径中的软件能力,真正成为组织可以长期管理和复用的软件资产。Gitee 当前公开的 CBB 资料也将其定位为构件级管理机制,强调审批、权限、版本和全生命周期治理。
先厘清一个概念:“内源库”不等于 InnerSource
在企业研发语境中,“内源库”有时会被用来泛指企业内部使用的代码库、组件库或制品库。本文也沿用这种工程语境,主要指企业内部受控的代码和制品资源。
但严格来说,它和国际软件工程领域的 InnerSource 并不是同一个概念。
InnerSource Commons 对 InnerSource 的定义,是在组织内部采用开源软件开发的原则和实践,核心在于开放协作、透明开发和跨团队贡献,而不是单纯把代码放进一个内部 Git 仓库。
因此,讨论 CBB 时,更准确的对象其实是:
代码仓库负责保存和演进源码;制品仓库负责保存构建后的软件包、镜像等交付物;CBB 则负责把其中具有复用价值的能力抽象出来,并建立统一身份、责任人、版本、授权和生命周期。
简单来说,仓库回答的是“东西在哪里”,CBB 更关注“这个东西是什么、谁负责、谁能用、当前是什么状态,以及发生变化后会影响谁”。
为什么有了代码库和制品库,企业仍然会遇到复用问题?
对于一个规模较小的研发团队,只依靠 Git 仓库和 Maven、npm、Docker Registry 一类制品仓库,通常已经能够支撑开发和交付。
问题往往出现在组织规模扩大之后。
假设一家企业已经积累了几百甚至上千个代码仓库,其中存在统一认证、日志采集、权限控制、消息通知、数据库访问等大量通用模块。
这些模块虽然“已经存在”,但开发人员真正想复用时,经常还需要回答一系列问题:
这个模块现在是否仍然维护?
哪个版本允许用于生产环境?
负责人是谁?
有没有经过安全和架构评审?
是否可以跨项目直接使用?
发生重大升级时,哪些项目会受影响?
使用这个模块是否需要授权?
旧版本什么时候停止维护?
代码仓库通常可以回答“代码在哪里”;制品库可以回答“某个版本的软件包在哪里”。
但它们天然不会完整表达构件的组织属性和治理状态。
这也是图片中“无 CBB 管理”和“有 CBB 管理”差异的核心:前者主要依赖人工查找、仓库级权限和经验传递,后者则尝试增加统一入口、构件编号与描述、构件级授权、生命周期以及复用记录。
换句话说,真正困难的并不是把一个 JAR 包存下来,而是让组织知道这个 JAR 包能不能用、应该怎么用,以及用了以后如何持续维护。
CBB 的本质,是给软件能力增加一层“资产身份”
在 Gitee 当前公开资料中,CBB 被表述为 Common Building Block,即可复用构件。
一个 CBB 可以关联一个或多个代码仓库以及相应的制品路径,但 CBB 本身并不等于这些资源。Gitee 的公开实践描述中,还包括构件登记、审批联动、元数据采集、权限治理、依赖分析和安全扫描等机制。
可以把它理解成给一组技术资源增加了一张“资产身份证”。
这张身份证至少需要说明几个问题:
它提供什么能力;
由哪个团队维护;
对应哪些源码与构建产物;
有哪些可使用版本;
当前处于什么生命周期状态;
哪些项目正在使用;
修改和升级需要经过什么流程。
于是,同一套软件能力不再只是散落在 Git、Maven、Docker Registry 等系统里的若干文件,而开始形成一个能够被组织识别的逻辑实体。
这实际上完成了一个重要转换:
Repository 管的是 Resource,CBB 管的是 Capability。
也就是从“资源管理”进一步走向“能力管理”。
代码库、制品库和 CBB 为什么不是重复建设?
把三者放到一条软件交付链路上,就会更容易理解。
开发人员首先在代码库中进行需求对应的源码开发、分支管理、Pull Request 和版本协作。Gitee 企业版当前的代码审查机制,例如支持通过 Pull Request 设置审核人员及合并门槛,这一阶段管理的核心仍然是“代码如何变化”。
代码通过构建之后,会产生 JAR、npm Package、容器镜像等软件制品。这些内容需要进入制品仓库进行保存、分发和依赖管理。Gitee Repo 当前公开产品信息显示,其覆盖 Maven、npm、Docker 等多种制品类型,并提供制品扫描、分发等能力。
而 CBB 位于更上一层。
例如“统一身份认证 SDK”可能同时包含:
一个核心代码仓库;
一个客户端 SDK 仓库;
若干 Maven 制品;
对应的 Docker 镜像;
接口说明和使用规范。
如果只从仓库角度看,它们是多个独立资源。
从 CBB 角度看,它们则属于同一个组织级软件能力。
所以代码库和制品库是 CBB 的资源基础,而 CBB 是这些资源之上的治理视图。
从软件供应链角度看,CBB 为什么越来越重要?
这种“从存储转向治理”的变化,并不只是研发管理层面的需求,也和软件供应链安全的发展方向一致。
NIST 在 Secure Software Development Framework(SSDF)中明确提出,在组织复用内部或第三方软件组件之前,应验证其完整性并检查来源信息,同时维护软件组件和依赖的 provenance,也就是来源与生成过程信息。
SLSA 对 provenance 的描述更加具体:它用于记录一个软件制品在哪里、何时以及如何被构建出来,使使用者可以验证制品是否按照预期方式产生。
OWASP 的软件供应链安全指南同样建议,在敏感或关键应用中使用受控的私有制品仓库,并在软件进入仓库之前进行审查,同时强调版本锁定、签名、来源验证和构建环境控制。
这些体系共同指向一个问题:
软件资产不能只有“文件”,还需要上下文。
这个上下文包括来源、构建方式、版本、责任主体、安全状态以及依赖关系。
从这个角度理解,CBB 与制品治理并不是两套相互竞争的机制。
制品库主要保证软件包能够被可靠存储和交付;CBB 则可以进一步描述“组织为什么认可这个构件,以及应该按照什么规则复用它”。
一个 CBB 构件在实际项目中可以怎样形成?
以企业常见的“统一认证服务”为例。
原有体系中,研发团队可能已经存在一个认证服务代码仓库,同时发布 Maven SDK 和容器镜像。其他项目知道路径之后就可以直接引用。
这已经实现了技术层面的复用,却未必建立了组织层面的治理。
如果进一步按照 CBB 思路管理,可以形成这样一套实践路径:
识别候选构件。 从多个项目中识别重复出现、接口相对稳定、具有跨项目价值的能力,例如认证、日志、消息、文件服务等。
建立构件身份。 为能力建立统一名称、编号、用途描述、负责人和维护团队,避免只通过仓库名称识别构件。
关联实际资源。 将对应代码仓库、制品仓库路径、文档和相关依赖关联到同一个构件实体,而不是复制一套新的资源。
建立质量与安全门槛。 在进入可复用状态前完成必要的测试、代码检查、依赖检查、安全扫描或架构评审。
建立版本与授权规则。 明确稳定版本、试用版本、废弃版本以及不同团队的访问和使用权限。
记录复用关系。 当业务系统引用该构件时记录使用方和版本,使后续漏洞修复、版本升级和影响分析有据可查。
管理变更与退役。 重大接口变化需要经过评审,并同步影响范围;不再维护的版本进入废弃或退库流程。
这样一来,同一个认证能力的代码、软件包和镜像仍然可以留在原来的研发基础设施中,但它们被纳入了统一的构件治理体系。
Gitee 公开的 CBB 分布式管理实践也是类似思路:构件可以继续在原有项目和制品路径中开发、构建和发布,再通过登记方式进入统一治理视图,而不是强制把所有资源搬迁到新的“构件中心”。
“分布式构件管理”解决的其实是组织问题
对于大型研发组织,把全部代码和制品强制迁入一个中央仓库往往并不现实。
不同业务线可能已经形成独立的仓库体系、流水线和交付节奏。
如果为了建立 CBB 又重新建立一套仓库,很容易出现“两套事实来源”:
开发人员维护原来的仓库;
管理人员维护新的构件平台。
最终反而增加同步成本。
因此,更合理的一种思路是把物理资源和逻辑治理分离。
代码仍然属于代码仓库;
制品仍然属于制品仓库;
项目仍然在自己的空间开发;
CBB 只负责建立逻辑身份以及组织治理关系。
从架构上看,这更接近“索引 + 元数据 + 工作流 + 权限 + 度量”的治理层,而不是新的存储系统。
这也解释了为什么 CBB 可以和现有 DevSecOps 平台组合,而无需取代 Git、CI/CD 或制品仓库。
CBB 如何进入完整的软件工厂体系?
从你提供的软件工厂架构图来看,CBB 并不是独立存在的功能,而是整个工程体系中的“组件层”。
其上方是完整的软件研发工具链,包括规划、需求、项目、代码、持续集成、制品、部署、测试、安全和运维;再往上是门户、智能辅助、知识库和度量能力。
其左侧则是流程和规范,包括敏捷开发、DevSecOps、工程规范、质量规范和安全规范等。
这种架构意味着:构件治理不是研发流程之外增加的一项行政工作,而应该直接嵌入研发流水线。
例如一个 CBB 新版本发布时,可以由流水线自动完成构建和测试,再触发安全扫描;审核完成后进入可复用状态;下游项目引用后形成依赖记录;一旦发现漏洞,又可以依据依赖关系反查受影响系统。
在高规范研发环境中,还可能需要把组织自身的软件工程标准纳入这一流程。图中列出的 GJB 5000B 和 GJB 438C 就属于这类流程与文档约束。其中公开的 GJB 438C-2021规定了军用软件开发文档的种类、结构、格式和内容要求,而 GJB 5000B-2021则属于军用软件能力成熟度模型。
因此,软件工厂真正需要解决的并不是“有没有某一个工具”,而是代码、构建、测试、安全、构件和流程规范之间能否形成连续的数据链。
有 CBB 和没有 CBB,真正的差别在哪里?
没有 CBB 并不意味着企业不能进行组件复用。
很多团队依靠 Wiki、群聊、代码搜索和内部制品仓库,同样可以复用组件。
区别主要体现在规模扩大以后。
没有统一构件身份时,组件发现依赖“认识谁”;有统一身份以后,可以通过目录和元数据搜索。
没有构件治理时,权限往往停留在整个仓库;加入构件治理后,可以围绕具体软件能力建立授权和审批规则。
没有生命周期时,一个旧组件可能几年无人维护却仍然被多个项目引用;有生命周期后,则可以显式标记开发、验证、稳定、废弃和退役状态。
没有依赖视图时,底层组件升级通常要靠团队逐个排查;如果能够记录构件使用关系,就可以进一步做影响分析。
所以 CBB 最大的价值不是“让代码第一次可以复用”,而是:
让复用这件事情本身成为可管理的工程过程。
CBB 也并不是建立得越多越好
构件治理还有一个容易被忽略的问题:治理本身也是有成本的。
如果把每一个工具类、每一个脚本都注册为 CBB,最终得到的可能只是一个更复杂的软件目录。
一个真正值得作为组织级构件管理的对象,通常至少应该满足几个条件:具有跨项目复用价值、有相对明确的接口、有持续维护责任,并且其变化值得被其他团队感知。
因此,实践中比“建设多少 CBB”更重要的问题是:
什么东西值得成为 CBB?
这实际上属于架构治理。
过细会产生大量维护成本,过粗则无法形成有效复用。
比较合理的路径往往是先从认证、日志、消息、数据库访问、通用业务能力等使用范围较广的模块开始,逐步建立构件目录,再依据真实使用情况扩展。
CBB 的成熟度最终应该通过“使用”来衡量
一个构件进入目录,并不等于复用已经发生。
真正有意义的指标应该来自实际研发活动,例如:
构件被多少项目引用;
目前有哪些稳定版本;
旧版本还有多少系统使用;
变更影响了哪些应用;
构件是否长期无人维护;
同类功能是否仍然存在重复建设。
这也是 CBB 从“资产登记”继续走向“资产运营”的关键。
如果只有构件登记,而没有使用关系、版本关系和变更关系,CBB 很容易退化成另一个软件目录。
只有把这些关系与代码库、制品库、CI/CD 和安全数据连接起来,构件治理才能真正进入软件工厂。
常见问题
CBB 会取代代码库和制品库吗?
不会。
代码库、制品库和 CBB 面向的是不同层次。代码仓库存储源码,制品仓库存储可交付的软件产物,CBB 则对一组具有复用价值的软件资源进行生命周期治理。Gitee 当前的公开实践也更倾向于将 CBB 建立在既有代码和制品体系之上,而不是重新建设一套存储体系。
有制品库以后,为什么还需要 CBB?
因为“能够下载一个包”和“组织认可它可以长期复用”并不是同一件事。
制品库解决的是存储、版本、分发和依赖获取;CBB 进一步关注负责人、准入状态、授权范围、生命周期、变更影响以及复用关系。
小团队有必要建设完整 CBB 平台吗?
未必。
团队和项目数量较少时,通过代码仓库、制品仓库、清晰的 README、版本规范和负责人机制通常已经可以解决大部分问题。
CBB 的价值往往随着组织复杂度上升而增加,尤其是在多团队、多项目、长期维护和强合规环境中。
CBB 能直接提高代码复用率吗?
不能简单画等号。
平台只能降低“发现、验证和使用构件”的成本。真正决定复用效果的仍然包括接口设计、文档质量、版本兼容性、维护能力和团队协作机制。
从“仓库思维”走向“软件资产思维”
代码库和制品库解决了现代软件研发非常重要的基础问题:代码在哪里,软件包在哪里。
而随着研发组织规模扩大,新的问题逐渐变成:
这个能力属于谁?
现在能不能使用?
应该使用哪个版本?
谁正在使用?
升级会影响哪些系统?
发生安全问题之后如何快速定位?
这正是 CBB 试图补上的一层。
从这个角度来看,CBB 并不是又一种研发工具,而是一种面向可复用软件能力的治理模型。
它把原本散布于代码仓库、制品仓库、流水线和文档中的技术资源,用统一身份、生命周期、权限、版本和依赖关系连接起来,使企业能够从“保存软件”进一步走向“经营软件资产”。
对于软件工厂而言,这种变化可能比单纯增加一个新的仓库更重要:真正成熟的软件复用,不只是让开发者能够找到已有代码,而是让组织能够知道什么值得复用、什么可以安全复用,以及复用之后如何持续演进。
资料核验说明: 本文对 CBB 和 Gitee 相关能力的描述主要依据 Gitee 2026 年公开的 CBB 构件治理、软件工厂及 Gitee Repo 产品资料;供应链安全部分参考 NIST SSDF、SLSA 1.2 和 OWASP Software Supply Chain Security Guidance;InnerSource 定义采用 InnerSource Commons 的官方定义。对于 Gitee 官方披露但缺少独立公开材料验证的客户效果数据、效率提升比例等,本版没有继续采用,以避免将厂商案例数据写成普遍性结论。