如何在jenkins上跨多个项目构建作业管理常见的ant构建脚本?

我有一组来自不同git存储库的java项目,我想用Jenkins构建它们。

它们都共享相同的ant构建脚本,该脚本通过ant导入机制使用项目特定的配置部分(例如编译类路径)。

目前我手动共享,但这对于公共部分的更改非常容易出错。

所以我的问题是:在jenkins服务器上跨多个构建作业管理共享ant构建脚本的好方法是什么?

一些想法……

  1. 将Ant脚本存储在您的单个项目可以从中提取的工件库中,就像任何其他依赖项一样。
  2. 创建包含构建脚本的父Git项目。 在您的父项目中,将每个子项目下拉为Git子模块 。 您可能需要对脚本进行一些小修改,以便在构建脚本中参数化子项目引用。

这个答案不是Jenkins特有的,应该可以移植到其他构建服务器。

这并不是一个不寻常的问题,因为@whiskeyspider表示它不仅限于jenkins。 在我看来,这也是阻碍大型遗留ANT构建的问题之一。 随着时间的推移,由于合理地担心它会破坏依赖构建,因此更改共同逻辑变得越来越困难。

将公共逻辑保存在单独的存储库或git子模块中是合理的建议,因为它可以对此逻辑进行版本控制。 另一种选择是将公共逻辑打包为ANT lib

      .. ..    

虽然看起来更复杂但我维护创建这些常见任务使得构建文件更加可重用和可读。 它还使您的组织的定制显而易见。 我发现它隐藏了可能涉及令人讨厌的嵌入式脚本的实现细节特别有用。

最后,我非常喜欢使用常春藤管理我的第三方依赖项。 这意味着我可以轻松地从我的存储库下载我的构建需要的任何版本的通用逻辑。

如何创建一个ANT库

 ├── build.xml └── src └── com └── example └── commonbuild └── antlib.xml 

antlib.xml

             

注意:

  • 此示例只有一个任务。 实际上,您的公共构建逻辑将提供多个宏定义。

build.xml文件

只是jar起XML文件:

    

我的构建逻辑还会将此jar文件发布到我的存储库中,以便其他构建可以使用常春藤将其下载。 也意味着公共构建逻辑可以具有单独且正式的发布管理生命周期(在大型组织中非常重要)

我自己也找到了另一种选择:

将公共构建脚本中的“可重写”部分声明为“中性”元素,例如,对于路径定义,定义一个空路径:

  

(可选)在中性定义后导入另一个构建脚本,使其覆盖现有的脚本:

  

在导入的文件中,您现在可以定义元素以满足要构建的项目的个别需求。