Jenkins多管道构建未检测到存储库中的更改

Dav*_* W. 5 jenkins-pipeline jenkins-2

我们在这个庄园中设置了Subversion存储库:

  • http://svn.vegicorp.net/svn/toast/api/trunk
  • http://svn.vegicorp.net/svn/toast/api/1.0
  • http://svn.vegicorp.net/svn/toast/data/trunk
  • http://svn.vegicorp.net/svn/toast/data/branches/1.2
  • http://svn.vegicorp.net/svn/toast/data/branches/1.3

我为整个toast项目设置了Jenkins Multi-Pipeline构建,包括所有子项目 - 每个子项目都是一个jar文件.我想要的是Jenkins每次在一个toast项目中更改任何文件时都会触发一个新的构建.那个项目应该重建.这样,如果我们在Toast中创建一个新的子项目或在其中一个toast子项目中创建一个新的分支,Jenkins将自动为它创建一个新的构建.

这是我的Jenkins Multi-Branch设置:

分支来源

颠覆

  • 项目存储库基础:http://svn.vegicorp.net/svn/toast
  • 证书:builder/*****
  • 包括分支:*/trunk, */branches/*
  • 排除分支:*/private
  • 物业策略:所有分行都拥有相同的物业

构建配置

  • 模式:Jenkinsfile

构建触发器(未选中)

  • 触发器远程构建(例如,从脚本)构建功能帮助:触发器*远程构建(例如,从脚本)
  • 定期构建功能帮助:定期构建
  • 在推广另一个项目时构建
  • Maven依赖关系更新触发器功能帮助:Maven依赖关系更新触发器
  • 如果没有另外运行,则定期

请注意," 构建触发器"列表列表不包括" 轮询SCM".存储库中的更改不会触发任何构建.Jenkinsfiles位于每个子项目的根目录.如果我强制重新索引,则会构建所有已更改的子项目并找到所有新分支.我最初定期检查并每分钟重新编制索引以获取更改,但这是klutzy,它似乎导致Jenkins消耗内存.

触发SCM更改的构建应该是非常基本的,但我没有看到这样的配置参数,就像我使用标准作业一样.我似乎也无法进入子项目并将其设置为触发构建.

必须有一些真正,非常简单的东西,我想念.

组态:

  • 詹金斯2.19
  • 管道2.3
  • 管道API:2.3
  • Pipeline Groovy:2.17
  • 管道工作:2.6
  • Pipeline REST API插件:2.0
  • 管道共享Groovy库:2.3
  • 管道:Stage View插件:1.7
  • 管道:支持API 2.2
  • SCM API插件:1.2

Dav*_* W. 2

我终于找到了答案。我在Jenkins 的 Jira 数据库中找到了一个条目,其中提到了这个确切的问题。该问题称为SCM 轮询未在 Mercurial SCM 的多分支管道中执行。其他用户也纷纷附和。

答案是 Jenkins 多分支项目不需要轮询 SCM,因为索引分支可以为您做到这一点:

分支项目(子项目)不会孤立地进行轮询。相反,多分支项目(父文件夹)包含该功能作为分支索引的一部分。如果现有分支上有新的头,则会触发新的分支项目构建。如果没有在文件夹配置中运行,您只需选中定期复选框即可。

因此,我需要设置分支的重新索引。我对这个解决方案不满意,因为它看起来相当笨拙。我可以在 SVN 和 Git 中添加提交后和推送后挂钩,以便在发生更改时触发构建,然后定期重新索引(例如每小时一次)。问题在于配置这些钩子并保持它们最新。每个项目都需要自己的 POST 操作,这意味着每次项目更改时都会更新存储库服务器。通过轮询,我不必担心钩子维护。