Java 沙盒Maven建立在Jenkins的基础上

Java 沙盒Maven建立在Jenkins的基础上,java,maven,jenkins,java-native-interface,continuous-integration,Java,Maven,Jenkins,Java Native Interface,Continuous Integration,我正试图为下面的难题找到一个解决方案。我有一些java项目,由maven管理,需要一些本机依赖项才能工作(运行单元和集成测试)。这些是以deb包的形式提供的,需要在运行构建之前安装 我用詹金斯做词。无法在Jenkins节点上安装本机依赖项,因为它们与其他生成冲突,并且可能经常更改。我现在所做的不是创建Jenkins作业类型“maven”,而是创建“freestyle”,并使用pbuilder创建一个干净的沙箱,安装所有必要的内容并调用maven build 这很好,但我失去了Jenkins ma

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

我用詹金斯做词。无法在Jenkins节点上安装本机依赖项,因为它们与其他生成冲突,并且可能经常更改。我现在所做的不是创建Jenkins作业类型“maven”,而是创建“freestyle”,并使用pbuilder创建一个干净的沙箱,安装所有必要的内容并调用maven build

这很好,但我失去了Jenkins maven的好东西,比如自动上游项目、依赖项改变时触发构建等。Jenkins根本不知道maven在那里


最后,我的问题。有没有一种方法可以同时实现这两个目标,隔离构建,使已安装的库不会影响其他构建,并利用Jenkins应用于maven构建及其依赖项的“魔力”?

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

  • 创造所需的环境
  • 运行maven作业
  • 清理

  • 以docker为例。在那里,您可以按照自己的意愿在隔离环境中运行进程。Docker的工作方式很容易与Jenkins沟通

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

    即使是自由式作业也有“调用顶级Maven目标”。您可以使用它来获得“maven goodies”,同时还可以运行其他构建步骤

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


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

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


    可以找到更多信息。

    您是否有关于如何准备环境的线索,以便下一个jenkins作业(maven类型)可以跳到它上面并运行“内部”?是的,docker在我脑海中闪过,但我无法找到关于如何做的线索。大多数示例只是在docker容器中执行某些内容。但是,如何设置它,使詹金斯知道,马文建设是发生在码头工人和他应该做他的把戏后?是的。但我看不出这有什么帮助。m2存储库不是问题所在。我需要安装非maven/java的东西,它将提供给执行的构建。例如执行一组APT get安装XYZ,这就引入了通过JNI访问的系统C++库。