如何在 Sonatype Nexus 3 中恢复已删除的组件
Posted
技术标签:
【中文标题】如何在 Sonatype Nexus 3 中恢复已删除的组件【英文标题】:How to restore a deleted component in Sonatype Nexus 3 【发布时间】:2017-11-22 13:48:59 【问题描述】:在 Nexus Repository Manager 2 中,您可以将服务器上已删除的资产/组件从 .trash 文件夹移动到存储库,以恢复您可能已删除的任何内容。这是因为 Nexus 将组件作为单独的文件存储在磁盘上。
Sonatype Nexus 3 将组件存储为 blob。我的猜测是,对于 Nexus 3,删除会将组件标记为在数据库的某些列中已删除。使用 Sonatype 连接数据库的解决方案是否提供了指令并操作数据库数据?
在这种情况下,Sonatype 支持具有以下信息:https://support.sonatype.com/hc/en-us/articles/115002930827-Accessing-the-OrientDB-Console
简而言之:
Unix
java -jar ./lib/support/nexus-orient-console.jar
Windows
java -jar lib\support\nexus-orient-console.jar
苹果机
.install4j/jre.bundle/Contents/Home/jre/bin/java -jar ./lib/support/nexus-orient-console.jar
退出控制台:
exit
我使用的 Nexus Repository Manager 是 3.2.0-01 版,nexus-orient-console.jar 也在该版本中。
【问题讨论】:
【参考方案1】:这将很难做到。记录与散列和属性一起在几个不同的表中创建。我会建议您不要尝试这样做,因为它可能会变得混乱。如果您打算这样做,您可能想看看如何在组件表和资产表中创建记录,并尽可能地重新创建(如果可能的话)。
不过,我想了解更多关于您的用例的信息。听起来您想要的是 Nexus Repository 中的一个“垃圾桶”,以便您可以恢复已删除的项目。如果您能解释原因,那将很有帮助。
【讨论】:
谢谢。在我的案例中,大部分删除都是通过 Tasks 完成的。在快照存储库上运行清理任务时,已发布的组件有可能会突然删除快照依赖项。 Nexus2 还存在不幸的“我删除了一个错误的版本”的情况,通过将 .trash 文件夹中的工件移动到之前的存储库,很容易纠正这种情况。 我不知道这个问题有多普遍,但它肯定会帮助我维护存储库并控制磁盘使用情况。附带说明一下,我希望删除任务能够记录已删除的组件,而不仅仅是删除的数量。事实上,我会喜欢一个“垃圾桶”类型的功能,在我运行紧凑的 blob 存储任务之前,我可以看到要永久删除的组件。我可以从这个“垃圾桶”中恢复组件。 感谢您的解释,我已经将这个发给内部的几个人来查看。 我们也对此感兴趣。会不会进入 Sonatype Nexus OSS 3.x 的功能列表?【参考方案2】:如果要恢复软删除的存储库和 blob,解决方案是使用原始名称创建 blob 存储,并创建与存储库相同的名称。 然后运行“repair - reconcile component database from blob store”任务。
注意:您也可以更改 Blob 存储名称和存储库。在 blob 中,用新的 repo 名称替换所有属性文件。
此方法适用于将 blob 存储和 repo 移动到其他 nexus 服务器。
【讨论】:
问题是如何恢复已删除的组件。我对恢复整个存储库和相关的 blob 存储并不感兴趣。【参考方案3】:理论上,这可能会有所帮助:https://community.sonatype.com/t/how-to-undo-asset-soft-delete-in-nxrm3/271/9
免责声明...以下说明使用当前 blob 存储的实现细节。因此,它们不受官方支持,并且如果实施发生变化,它们将无法工作。
与 blob 存储中的每个 blob 相关联的是一个属性文件。例如,一个特定的 blob 文件将包含两个文件:
fac5e64d-831b-4b58-98c9-3dd0e4bd1b59.bytes fac5e64d-831b-4b58-98c9-3dd0e4bd1b59.properties
在属性文件中,您会看到如下内容:
#2018-08-22 08:33:33,965-0500
#Wed Aug 22 08:33:33 CDT 2018
@BlobStore.created-by=admin
size=40
@Bucket.repo-name=maven-releases
creationTime=1534944813965
@BlobStore.created-by-ip=127.0.0.1
@BlobStore.content-type=text/plain
@BlobStore.blob-name=org/foo/bar/project/1.2.3/project-1.2.3.jar
sha1=30d7edff3bc3f5e601be9529460b7bd573b1a8b7
deleted=true
“@Bucket.repo-name”属性显示 blob 与哪个存储库关联。 “deleted=true”表示 blob 处于软删除状态。
要恢复软删除的文件,请找到属性文件并删除
deleted=true
线。然后安排并运行“修复:从 blobstore 协调组件数据库”任务。
协调任务有一些限制
【讨论】:
以上是关于如何在 Sonatype Nexus 3 中恢复已删除的组件的主要内容,如果未能解决你的问题,请参考以下文章