如何防止在hudson上的maven存储库中覆盖已发布的工件(非快照版本)

Ama*_*man 7 hudson maven

问题描述

考虑maven正在哈德森上使用的情况.

现在有人拿出结帐项目,修改了一些文件,但意外地使用了相同的工件ID和版本号(非快照).

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

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

  1. 无论如何要在hudson上撤销maven install对非快照版本(已发布的工件)的权限?
  2. 有什么方法可以比较hudson中的.m2和远程中央存储库中的校验和,以便校验和失败可以生成警告或失败构建?

我已经检查过没有办法强制从中央存储库更新非快照版本,因为它们是不可变的.

清除中央存储库或为hudson上的每个作业使用单独的存储库将分别导致构建时间和磁盘空间的增加.

任何帮助,将不胜感激.

Ama*_*man 1

没有直接的方法来解决这个问题,但我们通过编写一个每五分钟运行一次的 cron 作业间接解决了这个问题,并将所有非快照的 jar 在 Hundson 的本地存储库中标记为只读。这样,当 Hudson 中的某些项目尝试覆盖它时,我的 mvn install 或 mvn deploy 会无法覆盖工件,因为它们是只读的。

任何要发布的新工件都可以轻松编写。一旦在接下来的五分钟内写入,脚本会将它们标记为只读。

这是unix脚本permission-handler.sh的代码

#!/bin/bash
cd ~/.m2
date 2>&1>> permission-handler.out
find . -name '*jar' -type f | grep -v 'SNAPSHOT' | xargs chmod -vc 444 2>&1>> permission-handler.out
chmod 777 permission-handler.out
Run Code Online (Sandbox Code Playgroud)

还可以处理日志记录以查看哪些所有工件已标记为仅已发布。