处理本地存储库中旧快照的最佳方法?

Posted

技术标签:

【中文标题】处理本地存储库中旧快照的最佳方法?【英文标题】:Best way to handle old snapshots in local repository? 【发布时间】:2012-04-01 12:18:15 【问题描述】:

我们有一个 Nexus 本地存储库管理器,它处理我们所有的内部项目(以及镜像外部存储库)。对于我们的内部项目,我们只保留最新版本的快照构建。例如,如果我们有 ProjectX 1.0、1.1 和 1.2-SNAPSHOT,一旦 1.2 发布,我们将删除 1.2-SNAPSHOT,然后在我们的 Nexus 存储库中拥有 1.0、1.1、1.2 和 1.3-SNAPSHOT。

问题是我们的 Jenkins 服务器在其本地 .m2/repository 文件夹中拥有所有旧快照,并继续针对这些旧快照成功构建项目,而实际上它们应该失败(我们的开发人员应该修复他们的 POM文件。)

如果 Nexus 存储库中不存在这些不需要的快照,是否可以配置 Maven(在 settings.xml 或 pom.xml 中)删除它们?

如果没有,摆脱它们的最佳方法是什么? Jenkins 配置、cron 作业、其他选项?

谢谢...

【问题讨论】:

相关问题,关于开发人员应如何摆脱其本地 .m2\repository 文件夹中的旧时间戳工件:***.com/q/4275466/223837. 【参考方案1】:

在 Linux 上,您可以使用以下命令:

find $HOME/.m2/repository/ \
   -name "*-SNAPSHOT" \
   -type d \
   -mtime +60 \
   -print \
   -prune \
   -exec rm -r "" \;

解释:

在文件夹$HOME/.m2/repository/ 中查找任何名为*-SNAPSHOT 的内容 而且它必须是一个目录 并且在过去 60 天内不得修改 打印您找到的内容。如果您想测试命令,请在此处停止 -exec 将删除文件夹,-prune 告诉 find 之后不要尝试进入该文件夹。 -exec会删除里面的文件夹和文件。

【讨论】:

【参考方案2】:

你可以试试Maven Repo Cleaner Jenkins Plugin

【讨论】:

【参考方案3】:

我们在这里使用类似的设置。一旦发布工件(对于某些存储库),我们会自动删除快照。然后在我们的连续服务器上,我们只有一个每天一次删除本地存储库文件夹的 cron 作业。这对我们很有效。

【讨论】:

这看起来是处理问题的最轻松有效的方法。谢谢!【参考方案4】:

首先,如果您使用 jenkins 构建干净构建的最佳实践,这意味着每次构建都使用本地存储库,而不是服务器的全局存储库。此外,听起来您不使用发布插件来发布您的工件,该插件会自动检查 pom 是否包含 SNAPSHOT,如果有,则会失败。此外,还可以通过maven-dependency-plugin 清理本地存储库。根据我的经验,我简单地配置了一个删除超过一个月的 SNAPSHOT 的任务......

【讨论】:

【参考方案5】:

这可能是您的 jenkins 服务器上的 maven 配置问题。

maven 可以而且应该是configured,通过在<repository> 部分为<snapshots> 配置<updatePolicy> 的值来定期查找更新的快照。

<updatePolicy>daily</updatePolicy>

选项有:alwaysdaily(默认)、interval:X(其中 X 是以分钟为单位的整数)或 never

此外,如果版本更改(从 1.1-SNAPSHOT1.2-SNAPSHOT),尚不清楚 jenkins 将如何使用较旧的 (1.1-SNAPSHOT 版本成功构建。

【讨论】:

我实际上是在问相反的问题:如何在本地存储库中自动获取快照,而不是更新它们。不过还是谢谢。

以上是关于处理本地存储库中旧快照的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

从Firebase本地实时存储Room DB上的数据

存储 oauth 和本地身份验证方法的最佳实践?

如何在 Angular 中处理本地存储丢失的项目?

在 git 存储库中处理密码的最佳实践是啥?

如果存储在本地存储中,检查 jwt 令牌过期状态的最佳方法

使用 React Context 中的使用效果检查本地存储中是不是已经存在令牌的最佳方法