问题描述
考虑maven正在哈德森上使用的情况.
现在有人拿出结帐项目,修改了一些文件,但意外地使用了相同的工件ID和版本号(非快照).
然后他/她在hudson上构建这个项目并做了maven安装.修改后的工件现在是hudson .m2.任何其他依赖它的项目都将使用修改后的工件进行构建.如果编译没有失败,没有人发现这一点.即使正确的工件驻留在中央存储库中,也永远不会使用它,因为当hudson开始构建时,从.m2中拾取已修改的工件.
所以我正在寻找一种方法来防止这种意外的人为错误.
我已经检查过没有办法强制从中央存储库更新非快照版本,因为它们是不可变的.
清除中央存储库或为hudson上的每个作业使用单独的存储库将分别导致构建时间和磁盘空间的增加.
任何帮助,将不胜感激.
没有直接的方法来解决这个问题,但我们通过编写一个每五分钟运行一次的 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)
还可以处理日志记录以查看哪些所有工件已标记为仅已发布。
| 归档时间: |
|
| 查看次数: |
6340 次 |
| 最近记录: |