我正在尝试为以下谜题找到解决方案。我有java项目,由maven管理,需要一些本机依赖项才能工作(运行单元和集成测试)。这些以deb包的形式提供,需要在运行构建之前安装。
我使用Jenkins进行CI。无法在Jenkins节点上安装本机依赖项,因为它与其他构建存在冲突,并且它们可能经常更改。我现在所做的不是创建一个Jenkins作业类型'maven',而是'freestyle'并使用pbuilder创建一个干净的沙箱,安装所有必要的东西并调用maven build。
这很有效,但我正在失去像自动上游项目一样的Jenkins maven好东西,在依赖项改变时触发构建等.Jenkins根本不知道maven在那里。
最后,我的问题。有没有办法如何实现这两者,隔离构建,这样安装的库不会影响其他构建,并利用Jenkins的“魔法”应用于maven构建及其依赖项?
答案 0 :(得分:1)
您可以将构建分成三个作业,从而触发下一个作业。
答案 1 :(得分:1)
使用分布式Jenkins构建可以解决问题。可以将从属代理配置为为每个构建提供干净的环境(例如,通过VM,docker,...),并在构建完成后将其拆除。这样Jenkins作业可以是Maven类型,预构建步骤所做的任何更改都不会影响其他人。
可以找到更多信息here。
答案 2 :(得分:0)
考虑码头工人。在那里,您可以根据需要在隔离的环境中运行进程。 Docker的工作方式很容易与Jenkins通信。
作为一个好处,您还可以使用该docker容器在与Jenkins运行相同的环境中运行本地构建。
答案 3 :(得分:0)
即使是自由式工作也有#34;调用顶级Maven目标"。你可以用它来获得“好朋友”#34;同时还具有运行其他构建步骤的能力。
可以选择使用私有Maven存储库"这将确保它将使用相对于工作区的.m2/repository
文件夹位置。如果您需要分成多个作业,则可以使用"自定义/共享工作区"这些工作之间。
即使在Maven风格的工作中,也可以选择使用私有存储库,这样一个工作就不会影响另一个工作。