Sandboxed Maven以Jenkins为基础

时间:2015-04-16 06:16:31

标签: java maven jenkins java-native-interface continuous-integration

我正在尝试为以下谜题找到解决方案。我有java项目,由maven管理,需要一些本机依赖项才能工作(运行单元和集成测试)。这些以deb包的形式提供,需要在运行构建之前安装。

我使用Jenkins进行CI。无法在Jenkins节点上安装本机依赖项,​​因为它与其他构建存在冲突,并且它们可能经常更改。我现在所做的不是创建一个Jenkins作业类型'maven',而是'freestyle'并使用pbuilder创建一个干净的沙箱,安装所有必要的东西并调用maven build。

这很有效,但我正在失去像自动上游项目一样的Jenkins maven好东西,在依赖项改变时触发构建等.Jenkins根本不知道maven在那里。

最后,我的问题。有没有办法如何实现这两者,隔离构建,这样安装的库不会影响其他构建,并利用Jenkins的“魔法”应用于maven构建及其依赖项?

4 个答案:

答案 0 :(得分:1)

您可以将构建分成三个作业,从而触发下一个作业。

  1. 创造所需的环境
  2. 运行maven job
  3. 清理

答案 1 :(得分:1)

使用分布式Jenkins构建可以解决问题。可以将从属代理配置为为每个构建提供干净的环境(例如,通过VM,docker,...),并在构建完成后将其拆除。这样Jenkins作业可以是Maven类型,预构建步骤所做的任何更改都不会影响其他人。

可以找到更多信息here

答案 2 :(得分:0)

考虑码头工人。在那里,您可以根据需要在隔离的环境中运行进程。 Docker的工作方式很容易与Jenkins通信。

作为一个好处,您还可以使用该docker容器在与Jenkins运行相同的环境中运行本地构建。

答案 3 :(得分:0)

即使是自由式工作也有#34;调用顶级Maven目标"。你可以用它来获得“好朋友”#34;同时还具有运行其他构建步骤的能力。

可以选择使用私有Maven存储库"这将确保它将使用相对于工作区的.m2/repository文件夹位置。如果您需要分成多个作业,则可以使用"自定义/共享工作区"这些工作之间。

即使在Maven风格的工作中,也可以选择使用私有存储库,这样一个工作就不会影响另一个工作。