如何使Jenkins中的构建失败依赖于某个jar

时间:2016-01-05 12:51:23

标签: java maven security jenkins building

如果Java Maven项目中使用了某个jar,是否有办法使Jenkins中的构建失败?

例如我知道org.example:badartifact:1.0.1有一个安全漏洞。我告诉所有人,并且他们修复了他们的项目......但是也许一些第三方文物带来了它作为传递,没有人意识到这一点。

也许有人会忘记这个老错误......

所以我想最好在Jenkins中进行最后检查,这样我们就不会得到包含特殊工件的项目。

你如何处理这样的情况,你使用什么工具? (将列表列入白名单?将列表列入黑名单?等)

任何建议都表示赞赏。

2 个答案:

答案 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构建,我过去已经应用了这些解决方案(并且它们完美地工作):

  • Maven limits:如果在构建输出中找到正则表达式或匹配的文本,则可以使构建失败。在您的情况下,您可以让Jenkins构建步骤始终执行mvn dependency:tree,因此作为构建输出的一部分,依赖项列表(甚至是传递性的)。与您的禁用依赖项匹配的文本查找器规则将匹配它并使构建失败。
  • Jenkins Text Finder Plugin:与上面的类似,但集中管理已配置的失败原因。同样,失败基于匹配文本,但不需要构建配置:默认情况下,它将应用于所有构建。

答案 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/

此工具可以提供包含漏洞问题的第三方依赖项列表。