Maven 如何使jenkins在生成依赖项时触发依赖项项目上的生成

Maven 如何使jenkins在生成依赖项时触发依赖项项目上的生成,maven,build,jenkins,maven-3,pom.xml,Maven,Build,Jenkins,Maven 3,Pom.xml,关于如何设置Jenkins和maven 3,我有一个看似简单的问题 为了简单起见,我们有四个项目: 模型没有依赖关系 公共空间取决于型号 服务器这取决于通用和型号 前端取决于型号 我想要实现的是,一个成功的基于模型的构建会触发所有项目的新构建,这些项目在其pom中依赖于模型(此处为通用、服务器和前端) 如果Common失败,则无需构建服务器 在上述情况下,我似乎可以通过在模型和Commons上手动设置依赖项目来解决这个问题,但这些信息已经在每个项目(服务器和前端)的pom文件中找到,这使我得出结

关于如何设置Jenkins和maven 3,我有一个看似简单的问题

为了简单起见,我们有四个项目:

模型没有依赖关系
公共空间取决于型号
服务器这取决于通用和型号
前端取决于型号

我想要实现的是,一个成功的基于模型的构建会触发所有项目的新构建,这些项目在其pom中依赖于模型(此处为通用、服务器和前端)

如果Common失败,则无需构建服务器

在上述情况下,我似乎可以通过在模型和Commons上手动设置依赖项目来解决这个问题,但这些信息已经在每个项目(服务器和前端)的pom文件中找到,这使我得出结论/希望Jenkins能够自己解决这个问题

Jenkins能否通过解析Jenkins中定义的每个项目上的pom来推断依赖关系树,并自动执行某种最佳构建顺序/依赖关系处理,或者我是否必须如上所述设置“上游项目构建时阻止构建”和“其他项目构建后构建[依赖项目列表]”

我使用的是詹金斯版本1.473和Maven 3。
我们的maven项目pom不使用父或模块标记

/本杰明

两种解决方案

  • 在只声明构建顺序的其他项目(模型、公用程序、服务器和前端)之上创建模块pom。然后把这个项目安装到Jenkins上

  • 在每个作业中,都有一个复选框以“触发生成的内容”-->build after projects的形式激活。(选项的名称可能与我写的不完全相同,因为我的Jenkins是用法语配置的…)


  • 最好的解决方案是创建一个可产生以下结构的:

    root (pom.xml)
      +--- model (pom.xml)
      +--- commons (pom.xml)
      +--- server (pom.xml)
      +--- frontend (pom.xml)
    
    在每个模块中,例如在commons中,定义对模型模块的依赖关系等。 构建顺序将由maven自动完成

    有了这样的项目,您只需转到根目录并执行以下操作:

    mvn clean package
    
    您还可以使用:

    mvn --pl --am server
    

    它将自动生成服务器,但也会生成所有依赖的模块。

    假设您希望使用4个单独的生成而不是多模块生成,那么方法是在4个项目中的每个项目中选中“生成触发器”下的框

    “每当生成快照依赖项时生成”

    然后签入模型,jenkins基于SVN轮询启动该项目的构建,构建完成后,它会看到common依赖于模型,因此它会触发common的构建,以查看它是否仍然根据更新的模型进行构建


    jenkins作业必须创建为maven作业,才能显示此选项。它不适用于自由风格的项目,即使它们运行的脚本恰好调用了maven。

    这难道不意味着所有模块每次都会生成吗?我希望它只构建必要的部分,这取决于哪个项目获得构建请求。在jenkins中有一个名为“增量构建”的配置,它只构建已更改的部分。这是否意味着所有项目都需要合并和/或存在于同一个repo中?如果它们分布在不同的回购协议中会怎样?这将不起作用…只适用于单个回购协议中的多模块构建(但我不确定Jenkins的最新版本中是否存在这种情况)。(帖子已经7年了!)不幸的是,这与Jenkins没有任何关系。Will#1导致在构建公共时,服务器和前端也会得到构建,因为它们依赖于公共,而模型不会得到构建,因为它的构建没有被触发(因为没有SCM更改)
    #2是我试图描述的我目前正在做的事情。这意味着我必须手动设置模型和所有其他非顶级项目的构建依赖项。我想知道Jenkins是否有办法自己解决这个问题,而不需要我重新定义通过查看每个项目的每个pom已经找到的内容。我没有看到这样的构建触发器。它需要一个插件吗?确保你创建了一个maven作业,而不是一个自由风格的作业。它不需要额外的插件,因为maven插件包含在基本安装中。谢谢,但事实上我正在唱freestyle项目。不过,您可能希望将tat信息添加到您的答案中。您碰巧不知道如何在jenkins管道中启用此功能?(通过jenkinsfile)似乎需要先手动安装
    maven integration
    plugin,在我的情况下,默认情况下不安装该插件。