如果Java Maven项目中使用了某个jar,是否有办法使Jenkins中的构建失败?
例如我知道org.example:badartifact:1.0.1有一个安全漏洞。我告诉所有人,并且他们修复了他们的项目......但是也许一些第三方文物带来了它作为传递,没有人意识到这一点。
也许有人会忘记这个老错误......
所以我想最好在Jenkins中进行最后检查,这样我们就不会得到包含特殊工件的项目。
你如何处理这样的情况,你使用什么工具? (将列表列入白名单?将列表列入黑名单?等)
任何建议都表示赞赏。
答案 0 :(得分:1)
可能的Maven解决方案
您可以拥有公司超级POM(公司/部门/团队中所有Maven项目的parent POM),并在该超级POM中配置Maven Enforcer Plugin,其bannedDependencies rule禁止任何库,版本甚至范围。我个人使用这个选项即使是微不足道的错误(即不在测试范围内的junit会使构建失败)。
此解决方案是集中式的,因此更易于维护,但是要求所有项目都具有相同的父POM,并且开发人员可以随时更改父pom,因此跳过此管理。另一方面,集中式父POM对于依赖关系管理,常见配置文件,报告等非常有用。
注意:您无法通过默认配置文件在Jenkins服务器的Maven设置中对其进行配置,例如,为了将其应用于所有正在运行的Maven构建,因为{{3在设置提供的配置文件中自定义构建(这是一种设计选择,可以限制外部影响,因此可以更轻松地进行故障排除)。我过去曾尝试过这种方法并且碰壁了。
外部文件中的个人资料
在外部文件中指定的配置文件(即settings.xml或profiles.xml)在最严格的意义上是不可移植的。任何看起来很有可能改变构建结果的东西都只限于POM中的内联配置文件。像存储库列表这样的东西可能只是已批准工件的专有存储库,并且不会改变构建的结果。因此,您只能修改和部分,以及额外的部分
可能的Jenkins解决方案
如果您希望将治理直接集中在Jenkins中,因此独立于Maven构建,我过去已经应用了这些解决方案(并且它们完美地工作):
mvn dependency:tree
,因此作为构建输出的一部分,依赖项列表(甚至是传递性的)。与您的禁用依赖项匹配的文本查找器规则将匹配它并使构建失败。答案 1 :(得分:1)
这是一个完成这项工作的解决方案:)
使用Maven License plugin,您可以扫描Maven项目的第三方依赖项并生成THIRD_PARTY.txt报告(在target / generated-sources / license文件夹中)。
Maven命令行:
mvn license:aggregate-add-third-party
接下来,您可以使用TextFinder plugin搜索THIRD_PARTY.txt文件中的“不安全”依赖项(例如:org.example:badartifact:1.0.1),并根据需要更改构建的状态。
另一种解决方案是使用第三方工具来做到这一点。
我正在用这个进行一些调查:http://www.whitesourcesoftware.com/
此工具可以提供包含漏洞问题的第三方依赖项列表。