我们有一个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>
选项为:always
、daily
(默认值)、interval:X
(其中X是以分钟为单位的整数)或never
。
此外,如果版本发生更改(从1.1-SNAPSHOT
更改为1.2-SNAPSHOT
),则尚不清楚jenkins如何使用较旧的(1.1-SNAPSHOT
版本成功构建。