5

我们在这个庄园中有一个 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 构建——每个子项目都是一个 jarfile。我想要的是让 Jenkins 每次在其中一个 toast 项目中更改任何文件时启动一个新构建。该项目应该重建。这样,如果我们在 toast 中创建一个新的子项目在其中一个toast子项目中创建一个新分支,Jenkins 将自动为此创建一个新的构建。

这是我的 Jenkins多分支设置:

分支来源

颠覆

  • 项目存储库基础http://svn.vegicorp.net/svn/toast
  • 凭证builder/*****
  • 包括分支*/trunk, */branches/*
  • 排除分支*/private
  • 属性策略所有分支获得相同的属性

构建配置

  • 模式由 Jenkinsfile

构建触发器(未选择

  • 远程触发构建(例如,从脚本) 功能帮助:触发 * 远程构建(例如,从脚本)
  • 定期构建功能帮助:定期构建
  • 在提升另一个项目时构建
  • Maven Dependency Update Trigger 功能帮助:Maven Dependency Update Trigger
  • 如果没有,则定期运行

请注意,Build Triggers列表不包括Poll SCM。存储库中的更改不会触发任何构建。Jenkinsfiles位于每个子项目的根目录。如果我强制重新索引,则会构建所有更改的子项目并找到所有新分支。我最初确实定期检查并每分钟重新索引以获取更改,但这很笨拙,似乎导致詹金斯消耗内存。

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

一定有一些非常非常简单的东西我错过了。

配置:

  • 詹金斯 2.19
  • 管道 2.3
  • 管道 API:2.3
  • 管道 Groovy:2.17
  • 管道作业:2.6
  • 管道 REST API 插件:2.0
  • 管道共享 Groovy 库:2.3
  • 管道:舞台视图插件:1.7
  • 管道:支持 API 2.2
  • 单片机 API 插件:1.2
4

3 回答 3

2

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

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

分支项目(孩子们)不会孤立地投票。相反,多分支项目(父文件夹)包含该功能作为分支索引的一部分。如果现有分支上有新的头,将触发新的分支项目构建。如果没有在文件夹配置中以其他方式运行,您只需选中定期复选框。

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

于 2016-09-29T23:30:54.537 回答
1

您从未提到为您的存储库设置 webhook,所以这可能是问题(或部分问题)。

Jenkins 本身不能只知道何时对存储库进行了更改。需要将存储库配置为在进行更改时进行广播。Webhook 定义了一个 URL,存储库可以将各种信息 POST 到该 URL。将其指向 Jenkins 可以读取的 URL,并允许 Jenkins 响应它收到的特定类型的信息。

例如,如果你使用 github,你可以让 Jenkins 监听一个 url,例如https://my-jenkins.com/github-webhook/. Github 可以配置为在打开 PR 或执行合并后立即发送 POST。此 POST 不仅表示该操作已执行,还将包含有关该操作的信息,例如 SHA、分支名称、执行该操作的用户……等。

Jenkins 和 SVN 都应该能够定义它们各自发布和监听的 URL。

我的知识更具体地在于 git。但这可能是开始 SVN webhooks 的好地方:http: //help.projectlocker.com/knowledge_base/topics/how-do-i-use-subversion-webhooks

于 2016-09-29T18:15:40.943 回答
0

也许您需要在基本目录中进行版本控制。尝试将测试文件放在这里http://svn.vegicorp.net/svn/toast/test.txt。这可能会使 poll SCM 选项出现。

于 2016-09-29T13:43:38.330 回答