如何防止覆盖哈德森Maven存储库中已发布的工件(非快照版本)

问题描述 投票:7回答:5

问题描述

考虑在哈德森使用maven的情况。

现在有人退出了一个项目,修改了一些文件,但不小心使用了相同的工件ID和版本号(非快照)。>>

他/她然后在hudson上构建了这个项目并进行了maven安装。修改后的工件现在位于hudson .m2中。任何其他依赖于该项目的项目都将使用修改后的工件进行构建。如果编译没有失败,没人会发现这一点。即使正确的工件驻留在中央存储库中,也永远不会使用,因为当hudson开始构建时,会从.m2中拾取修改的工件。

所以我正在寻找一种方法来防止这种人为的意外错误。

  1. 是否要撤消对哈德森的非快照版本(已发布的工件)进行Maven安装的权限?
  2. 以任何方式在hudson和远程中央存储库中比较.m2的校验和,以便校验和失败可以生成警告或构建失败吗?
  3. 我已经检查过没有办法从中央存储库强制更新非快照版本,因为它们本来就是不可变的。

清除中央存储库或对哈德逊上的每个作业使用单独的存储库将分别导致构建时间和磁盘空间使用量增加。

任何帮助将不胜感激。

问题描述考虑在hudson上使用maven的情况。现在有人签出了一个项目,修改了一些文件,但不小心使用了相同的工件ID和版本号(非快照)。 ...

maven hudson
5个回答
1
投票

我认为您不会找到阻止安装覆盖工件的方法。但是,存储库服务器应具有一个设置,以防止部署更新的发行工件。例如,请参见"How do I disable artifact redeployment"(代表Nexus)。


1
投票

这是我们在项目中如何管理版本的方法:


1
投票

没有直接的方法可以解决此问题,但是我们通过编写每5分钟运行一次cron-job并在Hundson的本地存储库中将所有非SNAPSHOT标记为只读的cron-job来解决了这一问题。这样,当哈德森中的某个项目试图覆盖它时,我的mvn安装或mvn部署将无法覆盖工件,因为它们是只读的。


0
投票

这可以通过配置您的Maven存储库(例如Nexus,Artifactory)来解决,以免覆盖发行版本库。在Nexus中,我们有一个SNAPSHOT的仓库,一个是发布的仓库。 SNAPSHOT存储库允许覆盖。但是版本库不允许覆盖。这只是Nexus中该仓库的一个简单复选框功能。将发行版本放入存储库后,将无法覆盖它。效果很好。


0
投票

我有相同的要求。可以通过gradle任务的REST请求来完成对工件的检查。

© www.soinside.com 2019 - 2024. All rights reserved.