在本地存储库中处理旧快照的最佳方式



我们有一个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/存储库文件夹中有所有的旧快照,并继续根据这些旧快照成功地构建项目,而实际上它们应该失败(我们的开发人员应该修复他们的POM文件)

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

如果没有,最好的方法是什么?詹金斯配置,cron作业,其他选项?

谢谢。。。

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

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

说明:

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

您可以尝试Maven Repo Cleaner Jenkins插件

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

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

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

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

<updatePolicy>daily</updatePolicy>

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

此外,如果版本发生更改(从1.1-SNAPSHOT更改为1.2-SNAPSHOT),则尚不清楚jenkins如何使用较旧的(1.1-SNAPSHOT版本成功构建。

最新更新