ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

从代码库、制品库到 CBB: 软件工厂如何把“可复用资源”变成“可治理资产”

从代码库、制品库到 CBB: 软件工厂如何把“可复用资源”变成“可治理资产” 在企业软件研发体系中代码库、制品库和 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 管的是 ResourceCBB 管的是 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 FrameworkSSDF中明确提出在组织复用内部或第三方软件组件之前应验证其完整性并检查来源信息同时维护软件组件和依赖的 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 GuidanceInnerSource 定义采用 InnerSource Commons 的官方定义。对于 Gitee 官方披露但缺少独立公开材料验证的客户效果数据、效率提升比例等本版没有继续采用以避免将厂商案例数据写成普遍性结论。
返回列表