我们有一个Atlassian Bamboo实例,每天晚上11点20分左右,我们将项目(快照)部署到Nexus。
另一个Bamboo实例在午夜运行测试计划A并失败,因为它找不到来自Nexus的人工制品(虽然它正在寻找正确的存储库),这是由另一个Bamboo实例构建并且实际上在Nexus中的人工制品。
测试计划B在同一个实例的00:30左右开始,这个人找到了人工制品。早上,当我手动启动计划A时,它运作良好。
所以我怀疑存在缓存/元数据问题,但我无法确定要在Nexus或Maven设置中设置的正确配置。
它正在运行Maven 2.2.1。对于我们项目的不同版本运行Maven 3.0.5的其他计划似乎没有问题。 Nexus是2.7.2-03。 错误是“缺少2个必需的工件”。并且“来自指定的远程存储库:”中的Nexus组列表是正确的。这些组在项目的pom中配置如下:
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
有关如何解决此问题的想法吗?
谢谢!
答案 0 :(得分:0)
我们已确定将Maven 2版本移至Maven 3的最佳实践:
1)所有构建器(在个人计算机上运行构建的个人用户加上Jenkins / CI)应该同时进行转换。换句话说,一旦根据需要调整了工件的POM,并使用Maven 3将构建的工件部署到远程存储库,那么 Maven 2不应再用于构建同一个工件。这是因为Maven 3使用带时间戳的快照,而Maven 2则没有。此外,Maven 2和Maven 3以不同方式处理依赖项解析和存储库元数据。将两者混合起来效果不佳。
一个症状是有人使用Maven 3提交更改,构建和部署到远程仓库,然后另一个开发人员尝试使用Maven 2下载更改的jar并获取旧的jar。团队可以使用Enforcer插件阻止使用Maven 2构建工件。
2)所有构建器应清理其本地工件存储库。 Maven 2和Maven 3以不同方式处理依赖项解析和存储库元数据,而新的存储库将开发人员与奇怪的,难以发现的问题隔离开来。 (因为Maven将不得不在第一次构建时下载世界,考虑在你去吃午餐或离开工作之前做第一个Maven 3版本。)
3)对远程存储库具有删除权限的人(例如Nexus,Artifactory)应该登录到远程仓库,在Snapshots存储库中找到工件并删除发生Maven 2到3迁移的快照版本
例如,假设团队正在开发2.0-SNAPSHOT,并且有一个任务是从Maven 2移动到此版本的3。完成任务的POM更改后,开发人员登录到远程仓库,找到com.company.some-group:myArtifact(s)
,并完全删除2.0-SNAPSHOT版本。这将删除Maven 2构建的所有快照。