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