我正在寻找一篇文章,它描述了在工件存储库管理器中创建存储库时要遵循的一组准则。
我知道:
您需要将快照保存在快照存储库中。
您需要将发布保存在发布存储库中。
第三方工件应位于单独的存储库中(第三方库的分叉/补丁版本也是如此)。
int-*
通常在名称前加上和是个好主意ext-*
。通常不同的产品线最终都有自己的存储库,因为有时它们的工件不相互依赖。
我一直在尝试找到一篇关于此的文章,以向客户说明这种工件分离抽象是如何由其他公司和组织使用存储库完成的。
提前谢谢了!
我正在寻找一篇文章,它描述了在工件存储库管理器中创建存储库时要遵循的一组准则。
我知道:
您需要将快照保存在快照存储库中。
您需要将发布保存在发布存储库中。
第三方工件应位于单独的存储库中(第三方库的分叉/补丁版本也是如此)。
int-*
通常在名称前加上和是个好主意ext-*
。
通常不同的产品线最终都有自己的存储库,因为有时它们的工件不相互依赖。
我一直在尝试找到一篇关于此的文章,以向客户说明这种工件分离抽象是如何由其他公司和组织使用存储库完成的。
提前谢谢了!
我不知道存在这样的文章,但正如@tieTYT 提到的,您可以查看 Artifactory 默认存储库。它们反映了多年在二进制文件管理、持续集成和交付方面的经验。即使您使用 Nexus,这些做法仍然适用(即使不安装 Artifactory,您也可以通过查看 JFrog 公共 Artifactory 实例http://repo.jfrog.org来观察它们)
为方便起见,以下是默认值(强调重要用法):
本地存储库:
libs-snapshot-local
:在这里部署你的本地快照libs-release-local
:在此处部署您的本地版本ext-snapshot-local
:在此处部署远程仓库中不可用的第 3 方快照ext-release-local
:在此处部署远程仓库中不可用的 3rd-party 版本plugins-snapshot-local
: 在这里部署你的插件(通常是 maven)快照plugins-release-local
:在此处部署您的插件(通常是 maven)版本远程存储库:
jcenter
: http://jcenter.bintray.com的代理。通常,这是您需要的唯一远程仓库。它包括 maven Central 中存在的所有内容以及所有其他主要的 Maven 存储库虚拟存储库:
remote-repos
:所有远程存储库的聚合libs-release
:这是发布版本的解析存储库。它包括remote-repos
,libs-release-local
和ext-release-local
libs-snapshot
:这是快照构建的解析存储库。它包括remote-repos
,libs-snapshot-local
和ext-shapshot-local
repo
:这是一个特殊的虚拟存储库,它聚合了所有内容。通常,如果您计划使用二进制存储库构建发布管道,请不要使用它。我很乐意就具体问题提出建议。
与许多关于最佳实践的问题一样,答案是:视情况而定。
从技术上讲,只需要两个区别:
快照与发布仓库
托管与代理存储库
由于 Maven 存储库格式以及 Maven 和其他构建工具区分它们如何处理元数据以及它们在上传期间做什么,因此需要将快照与发布存储库进行区分。
对于代理存储库,您只需添加所需的代理数量即可。这将取决于您需要哪些组件,并且将分别用于代理快照和发布存储库。
对于托管存储库,您还必须拥有单独的快照和发布存储库。除此之外,一切都可以争夺。在 Nexus(和 Artifactory)和其他设置中预先配置一个单独的第三方存储库当然很有用,但并不是真正必要的。您可以根据需要通过内部元数据整理所有这些区别。
同样,您可以为每个人创建一个发布存储库,或为每个团队创建一个存储库或其他任何东西。您仍然可以在这些存储库中应用访问权限,以在 Nexus 中使用存储库目标单独访问等。我认为 Artifactory 和 Archiva 可以做类似的事情。这里的问题主要归结为易于管理、备份、安全设置和用户访问。
如果您想拥有单独的存储库,那么您提到的命名约定可能会有所帮助,但从技术上讲,这些都不是必需的。
我见过的其他事情是例如用于将遗留项目库迁移到存储库但在迁移完成后被冻结的迁移存储库,每个团队单独的存储库,每个项目的单独存储库等等。另一方面是针对不同级别的批准等的单独回购(例如,在http://blog.sonatype.com/people/2013/10/golden-repository/上查看问题)
然而,最终这一切都取决于可用性和元数据,并且不是必需的。最终,在大多数情况下,这些存储库将组合在一起并通过一组访问,从而使整个分离变得平坦。并且访问权限仍然会传递到组中,因此您仍然可以随意控制所有内容。因此,如何切片、切块和管理它变成了一个品味问题。
PS:我指的是 Maven 存储库和格式。一旦您将一大堆其他格式添加到混音中并围绕它们以其他格式公开它们的包装器,一切都会变得更加复杂,但事情背后的想法保持相似。