胡萝卜烤地瓜
胡萝卜烤地瓜
发布于 2026-07-25 / 1 阅读
0
0

NO.A5 给团队的 C/C++ 包安个家:私有 Conan Center 与双 remote 过日子法

⚠️ 法律与用途声明:本文讨论基于 Conan 2、Artifactory CE 的私有包仓库选型与消费模型,属于经验分享与架构讨论。所有企业名、项目名、仓库内部命名、脚本名与具体参数均已脱敏。读者须遵守所在地区法律法规。


一、团队的包,总得有个家

做 C/C++ 的团队,日子过久了总会攒下一堆"自家的东西":内部算法库、按需裁剪过的第三方依赖、自己打过补丁的组件。这些东西没法放进 Conan 官方的公共仓库 conancenter——那地方像个只收合格开源包的大超市,不收你的私有货;可它们要是只躺在每个开发者自己的机器里,又没法团队共享,今天你编一份、明天他编一份,版本对不上,bug 复现不了。

所以迟早得给这些包安个家:一个团队自己的私有 Conan 仓库

这篇就聊两件事:这个家怎么选地、怎么装修,以及住进去之后怎么和那家大超市打配合——也就是所谓的双 remote 过日子法。


二、选址:为什么挑了 Artifactory CE

Conan 的私有仓库不是只有一种选择。摆在我们面前的至少有几块地:

  • 官方的 conan-server:轻量、能跑,但它本质是个 PoC,权限模型、高可用、管理界面都很弱,撑不起团队长期用。
  • Artifactory CE:免费,而且专门为 C/C++ 加 Conan 设计,权限、虚拟仓库、审计这些生产要用的能力都有。
  • Artifactory Pro:能力最强,但花钱。

我们的判断很简单:conan-server 太瘦、Pro 太贵、CE 刚好。CE 免费、开源、C/C++ 专用,团队私有仓加消费的那点需求,它兜得住。选址这件事,不选最贵的,选够用且能长期维护的。

三、装修:给包挂个正经门牌号

包要进家,得先有个叫法。Conan 里包有两种引用风格,差别看着不大,实际影响挺深:

  • name/version 这种,像门牌号——清楚、好记、谁都看得懂。
  • name/version@user/channel 这种,像老式暗号——后面还挂着一串用户名和频道,是 Conan 1 那会儿个人往公共仓传东西留下的习惯。

我们全团队统一用门牌号风格,对齐 conancenter 的写法。理由很实在:暗号风格在团队规范里只会增加心智负担,谁也记不住某个包到底挂在哪个 user 哪个 channel 下面;门牌号风格让公共仓和私有仓的包引用方式长得一模一样,开发者不用为了"这是公共包还是私有包"切换两套脑子。

这个选择后面还会反复受益——CI 脚本、文档、依赖声明,全都用同一套引用格式,没有特例。

四、双 remote 配方:先去超市买,买不到回自家地摘

家装修好了,接下来是怎么过日子。核心就一句话:客户端配两个 remote,而且顺序不能乱

  • 第一位,conancenter(那家大超市)。开源公共包,优先从这儿消费。
  • 第二位,私有仓(自家那块自留地)。团队自己的包、公共仓里没有的东西,从这儿消费。

顺序为什么重要?因为 Conan 在你不写 -r 指定仓库时,会按 remote 列表顺序挨个找:先逛超市,超市没有的,再回自家地摘。这个"公共优先、私有兜底"的顺序,让开发者一条命令就能消费两类包,不用脑子里记"这个包到底在哪个仓"。

这听起来不起眼,但用过单 remote 的人都知道它的好。单 remote 时代,开发者得自己判断"这个依赖是公共的还是内部的",然后手动指定从哪儿拉;配错就报错。双 remote 把这个判断交给了顺序——公共的默认有,私有的默认兜底,开发者只管 conan install,剩下的事顺序帮他办。

五、防撞条码:给自家包贴个独有商标

双 remote 有个坑,得提前防。

假设你给某个第三方包打了个内部补丁,版本号没变,还叫原来的名字。这下麻烦了:按"公共优先"的顺序,Conan 会先在超市里找到同名的那个原版,直接拉走——你以为拉的是自家的补丁版,实际拉的是公共原版。包一样、版本一样,内容却不是你要的,这种 bug 极其难查。

防范办法很朴素:给自家的包加个独有前缀,像给自家货贴个独有商标,让它跟超市货的条码撞不上。公共仓不可能有你们内部前缀的包,于是同名冲突从根上就不存在了。

这条规矩定下来,团队所有内部包统一前缀,既防撞又好认——一眼看到前缀就知道这是自家货。

六、门面和钥匙(这篇只点到)

家要能住人,还得有两样东西,但每样都够单独写一篇,这里只点一下:

  • 门面:私有仓前面挂一层 Nginx,做 HTTPS 入口和域名映射,别让仓库裸着对外。
  • 钥匙:别让全团队都拿 admin 密码进仓库。用 scoped token——只读的归只读、能上传的归上传,最小权限,分开签发。这套自助签发和审计机制,是下一篇 Token Broker 的主题。

七、过日子靠的是规矩,不是工具

回头看,给团队的包安个家,真正难的不是装一个 Artifactory CE——那只是运行个容器的事。难的是定下一套过日子的规矩:

  • 公共优先、私有兜底:双 remote 的顺序,让公共仓当主力、私有仓做补充,开发者无感。
  • 门牌号统一:包格式用 name/version,不搞暗号,全链路一套引用。
  • 条码防撞:自家包加前缀,跟公共货天然隔离。
  • 真源唯一:私有仓是自家包的唯一归档地,后面所有缓存、加速层(NO.A2、NO.A3 讲的那些)都是从它派生的影子。

这套规矩立住了,团队里的包才真的像个家——东西有固定地方放、有统一的叫法、不会拿错,谁来了都能找得着。工具会换(CE 升级、甚至换 Pro),但这些过日子的规矩是稳的。

下一篇,我们讲怎么给这个家配一把好使又安全的钥匙:Token Broker 自助授权——怎么让开发者自己拿到只读 token、又不用碰 admin 密码。


参考链接:

[1] Conan 2 官方文档:Conan servers 选型(conan-server 与 Artifactory) https://docs.conan.io/2/examples/conan_servers/conan_server.html

[2] Conan 2:Artifactory CE for C/C++ 接入示例 https://docs.conan.io/2/examples/conan/servers/jfrog_artifactory_ce.html

[3] Conan 2 remote 命令(双 remote 配置基础) https://docs.conan.io/2/reference/commands/remote.html

[4] ConanCenter(官方公共包仓库) https://conan.io/center

[5] JFrog Artifactory CE 开源版 https://jfrog.com/open-source/

[6] Conan 2 包引用格式(name/version 与 user/channel) https://docs.conan.io/2/reference/conanfile/attributes.html


评论