我们在这个庄园中设置了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 多分支设置:
分支来源
的Subversion
- 项目资源库基础:
http://svn.vegicorp.net/svn/toast
- 凭据:
builder/*****
- 包含分支:
*/trunk, */branches/*
- 排除分支:
*/private
- 属性策略:所有分支都获得相同的属性
构建配置
- 模式:通过Jenkinsfile
构建触发器(未选择)
- 远程触发构建(例如,从脚本)对功能的帮助:触发*远程构建(例如,从脚本)
- 定期构建功能帮助:定期构建
- 在推广其他项目时构建
- Maven依赖关系更新触发器功能帮助:Maven依赖关系更新触发器
- 如果没有另行运行,则定期
请注意,构建触发器列表不包括投票SCM 。存储库中的更改不会触发任何构建。 Jenkinsfiles
位于每个子项目的根目录中。如果我强制重新索引,则会构建所有已更改的子项目并找到所有新分支。我最初检查了定期并且每分钟都重新编制索引以获取更改,但这是klutzy,它似乎导致Jenkins消耗内存。
触发SCM更改的构建应该是非常基本的,但我没有看到这样的配置参数,就像我对标准作业一样。我似乎也无法进入子项目并将其设置为触发构建。
我必须要有一些非常非常简单的东西。
配置:
答案 0 :(得分:2)
我终于找到了答案。我在Jenkins' Jira Database中找到了一个提到这个确切问题的条目。该问题称为 SCM轮询未在Mercurial SCM的多分支管道中执行。其他用户也插话。
答案是Jenkins多分支项目不需要轮询SCM,因为对分支机构进行索引会为您做好准备:
分支项目(子项)不会孤立地进行轮询。相反,multibranch项目(父文件夹)将该函数作为分支索引的一部分包含在内。如果现有分支上有新头,将触发新的分支项目构建。您只需要在文件夹配置中选中定期(如果不是)。
所以,我需要设置分支的重建索引。我对这个解决方案不满意,因为它看起来很笨拙。我可以在SVN和Git中添加post-commit和post-push挂钩,以便在发生更改时触发构建,然后定期重新编制索引(比如每小时一次)。问题意味着配置这些挂钩然后使它们保持最新。每个项目都需要自己的POST操作,这意味着每次项目更改时都要更新存储库服务器。通过民意调查,我不必担心挂钩维修。
答案 1 :(得分:1)
您从未提及为您的存储库设置webhook,因此这可能是问题(或其中的一部分)。
Jenkins本身不仅可以知道何时对存储库进行了更改。需要将存储库配置为在进行更改时进行广播。 webhook定义了一个URL,存储库可以将各种信息发布到。将它指向Jenkins可以读取的URL,这允许Jenkins响应它收到的特定类型的信息。
例如,如果你使用github,你可以让詹金斯听一个网址,例如https://my-jenkins.com/github-webhook/
。可以将Github配置为在打开PR或执行合并时立即发送POST。此POST不仅表示操作已执行,还包含有关操作的信息,例如SHA,分支名称,执行操作的用户等。
Jenkins和SVN都应该能够分别定义POST和监听的URL。
我的知识更专注于git。但这可能是开始使用SVN webhooks的好地方:http://help.projectlocker.com/knowledge_base/topics/how-do-i-use-subversion-webhooks
答案 2 :(得分:0)
也许您需要在基本目录中进行版本控制。尝试在此处输入测试文件http://svn.vegicorp.net/svn/toast/ test.txt 。这可能会使调查SCM选项显示出来。