【问题标题】:Locally caching specific artifacts in Nexus在 Nexus 中本地缓存特定工件
【发布时间】:2015-06-19 11:55:02
【问题描述】:

我目前正在评估 Nexus,看看它是否能满足我们公司的要求。我似乎在手册中找不到我需要的东西,所以我想在放弃之前先问问。

我们有严格的要求,只有经过专门授权的 OSS 库(及其依赖项)才能用于开发。我们希望在不放弃传递依赖的自动解析的情况下实现这一点,因此 Nexus 似乎是一个很好的工具。

我们的想法是,我们可以将所有代理存储库保持在“阻塞”模式,从而允许 Nexus 提供本地缓存的工件,但如果构建请求尚未缓存的内容,则拒绝上网。

“OSS 管理员”(人)然后会使用他的管理员 ID 登录,使存储库退出“阻止”模式,然后以某种方式告诉 Nexus 下载他想要授权的库列表。在所有库及其依赖项都已本地缓存后,他会将存储库重新置于“阻塞”模式。

我似乎找不到告诉 Nexus 从 UI 下载库及其依赖项的方法。 “OSS Manager”不是开发人员,因此每次想要添加授权库时都设置自定义 Maven 或 Gradle 构建不是一种选择。

我可以使用裸 Nexus(或者插件?)来实现这一点,还是我需要编写一个自定义应用程序,“OSS 管理器”将使用该应用程序根据所需库的列表生成一个虚假的 Maven 构建,以及然后在 Nexus 实例处于“Unblocked”状态时对其运行该构建?

【问题讨论】:

  • Nexus Pro 功能称为采购套件:books.sonatype.com/nexus-book/reference/procure.html
  • 奇怪的是,采购套件仍然无法让管理员采购特定的工件及其所有依赖项。它所做的只是设置简单的规则来匹配工件名称以允许或禁止采购。解决依赖关系仍然留给外部构建,这意味着“OSS Manager”在没有开发人员直接支持的情况下无法完成他的工作。
  • 这是一个复杂的话题,没有简单的答案。事实上,每个项目的依赖树或多或少都是唯一的,并且取决于在特定 POM 中选择了哪个版本的依赖。 Sonatype 生成的规则需要在外部生成。我建议与拥有其他商业许可证管理软件的 Sonatype 交谈

标签: maven nexus


【解决方案1】:

当请求模块时,普通 Nexus 代理存储库会下载这些模块。例如,在 Python 中,可以执行以下操作以下载 pytest 模块及其所有依赖项:

george@my-box 10:34 ~/src/myproj> pip install pytest
Looking in indexes: http://10.1.2.3/nexus/repository/pypi-proxy/simple
Collecting pytest
  Downloading http://10.1.2.3/nexus/repository/pypi-proxy/packages/7e/16/83b2a35c427b838df9836c9e7e4ae6dfbcbdea643db44652f693b1c57d70/pytest-4.4.0-py2.py3-none-any.whl (223kB)
    100% |████████████████████████████████| 225kB 43.3MB/s 
Collecting pluggy>=0.9 (from pytest)
  Downloading http://10.1.2.3/nexus/repository/pypi-proxy/packages/84/e8/4ddac125b5a0e84ea6ffc93cfccf1e7ee1924e88f53c64e98227f0af2a5f/pluggy-0.9.0-py2.py3-none-any.whl
Collecting more-itertools>=4.0.0; python_version > "2.7" (from pytest)
  Downloading http://10.1.2.3/nexus/repository/pypi-proxy/packages/b3/73/64fb5922b745fc1daee8a2880d907d2a70d9c7bb71eea86fcb9445daab5e/more_itertools-7.0.0-py3-none-any.whl (53kB)
    100% |████████████████████████████████| 61kB 30.9MB/s 
Collecting atomicwrites>=1.0 (from pytest)
  Downloading http://10.1.2.3/nexus/repository/pypi-proxy/packages/52/90/6155aa926f43f2b2a22b01be7241be3bfd1ceaf7d0b3267213e8127d41f4/atomicwrites-1.3.0-py2.py3-none-any.whl
Collecting attrs>=17.4.0 (from pytest)
  Downloading http://10.1.2.3/nexus/repository/pypi-proxy/packages/23/96/d828354fa2dbdf216eaa7b7de0db692f12c234f7ef888cc14980ef40d1d2/attrs-19.1.0-py2.py3-none-any.whl
Requirement already satisfied: six>=1.10.0 in /home/george/miniconda3/lib/python3.7/site-packages (from pytest) (1.11.0)
Collecting py>=1.5.0 (from pytest)
  Downloading http://10.1.2.3/nexus/repository/pypi-proxy/packages/76/bc/394ad449851729244a97857ee14d7cba61ddb268dce3db538ba2f2ba1f0f/py-1.8.0-py2.py3-none-any.whl (83kB)
    100% |████████████████████████████████| 92kB 34.8MB/s 
Requirement already satisfied: setuptools in /home/george/miniconda3/lib/python3.7/site-packages (from pytest) (40.2.0)
Installing collected packages: pluggy, more-itertools, atomicwrites, attrs, py, pytest
Successfully installed atomicwrites-1.3.0 attrs-19.1.0 more-itertools-7.0.0 pluggy-0.9.0 py-1.8.0 pytest-4.4.0

因此,缓存 pytest 模块和用户所需的所有依赖项的过程将是:

  1. 取消阻止 pypi-proxy 存储库
  2. 执行pip install pytest
  3. 阻止 pypi-proxy 存储库

【讨论】:

  • 这相当于每次我们要添加一些依赖项时都设置一个 Maven 或 Gradle 构建。我的问题是问如何避免这种情况。
  • 你是对的。这可能是一个简单的 shell 脚本,它会提示用户安装每个库,但如果您不能在命令行中信任 OSS 管理器,那么它就无法启动。我的错。
猜你喜欢
  • 1970-01-01
  • 2017-04-23
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2021-06-23
相关资源
最近更新 更多