我已成功为Java应用程序创建了一个小型软件工程环境(SEE),其中包括基于maven和nexus的其他工具。我的实际问题是 - 并不是一个真正的惊喜 - nexus通常需要访问互联网才能从中央存储库获取所请求的工件。但SEE必须严格脱机,并且无法改变它(安全原因)。
我的第一个快速解决方案是镜像连接到互联网的机器上的nexus / maven安装,运行一些标准的pom来填充镜像连接并通过CD-ROM将缓存迁移到目标系统。蛮丑的。我真的不希望调整该过程来获取工件或新工件的更新。实际上,我们现在通常只是导入我们需要的库并使用nexus创建新工件,而不是使用来自中央和其他人的官方文件。
是否有人面临同样的挑战,并找到了更聪明有效的方法?
修改
感谢所有的答案,我想我必须更准确地解决实际问题以及我现在正在考虑的解决方案:我认为我必须创建,填充和同步私有的“中央”存储库,基于互联网上的中央和其他回购,或者确切地说:两个相同的存储库。一个连接到互联网,另一个连接到本地网络。然后我可以让互联网连接的存储库“保持最新”,并通过DVD将更改复制到本地存储库 - 这对于Nexus是可见的。
它会起作用吗?是否有关于如何在私有服务器上设置“中心”之类的文档,是否有一种同步所选工件的机制?
(我不想在开始时发表我的想法,因为我希望得到完全不同的想法)
编辑2 - “最佳做法” - 根据要求添加
我们在与互联网完全脱节的环境中使用maven的“最佳实践”:
dependency:go-offline
(plugin)。这将使用所有必需的artedfacts填充本地存储库每周一次使用所有POM文件(可以自动化)并且您拥有一个相当稳定且可用的本地存储库。
答案 0 :(得分:6)
它会起作用吗?是否有关于如何在私有服务器上设置“中心”之类的文档,是否有一种同步所选工件的机制?
嗯,你可能成为mirror的中心但是,抓住~10 GB的文物是什么意思?您不需要所有这些,通常的建议是使用存储库管理器。
其实我最初的想法是:
rsync
此Nexus的内容为DVD。 我发现这个解决方案很难看,但是现在我们有关于你情况的更多细节,这可能是可以接受的。
答案 1 :(得分:4)
我曾经在一个网络环境中工作,网络的一部分无法访问互联网或任何其他网络。每当我们需要更新此网络中的软件时,我们都会执行以下操作:
我们通过自动配置交换机以适当地连接和断开网络来完全自动化此过程(因此始终存在物理连接但没有可用的IP连接)。也许你可以做类似的事情 - 它只取决于“断开连接”的定义的灵活性;)
答案 2 :(得分:3)
我在我的环境中遇到了类似的问题。
通常我们托管Nexus的服务器无法访问互联网。但是,我与运营团队会面并向他们解释说,允许Nexus自动从互联网上下载工件对我们来说是一个巨大的生产力。
一旦他们理解了我们的需求,操作系统就允许服务器访问非常严格的Internet IP白名单,例如中央Maven存储库。因此,当外部存储库IP地址发生变化时,我们仍然需要通过ops添加新存储库或执行白名单修复。但总的来说,我们认为这是安全性和生产力之间的最佳折衷,它对我们有用。
一旦您向他们重申如何这样做会提高您的工作效率并最终节省每个人的时间,看看您的利益相关者是否会以高度限制的白名单方式将您的网络连接到互联网。
答案 3 :(得分:3)