我在Jenkins中设置了许多Multibranch Pipeline作业(运行2.46.2 LTS,Branch API 2.0.8,GitHub Branch Source 2.0.5和Pipeline Multibranch 2.14)并且刚刚注意到分支索引 - 因此任何旧分支的清理 - 似乎都不是由GitHub的webhook调用触发的。如果有人手动单击“立即扫描存储库”链接,或者重新保存Jenkins中的作业配置,则似乎只会触发它。我正在使用“扫描存储库日志”页面中显示的时间戳作为分支索引发生时间的指示。
似乎新的分支或对现有分支的更改正在被正确检测和构建,因此来自源代码控制(GitHub)的webhooks正在工作,但是这也不会引发分支索引并因此触发旧分支清理。我只是无法从documentation判断这是否是正确和预期的行为,或者我的设置中是否有错误。
我注意到“如果没有以其他方式运行”设置的帮助文本说:
某些类型的文件夹会在收到外部事件后立即自动重新编制索引。例如,多分支项目在收到SCM更改通知时将重新检查其SCM存储库以查找新的或已删除或已修改的分支。 (推送通知可以根据用于每个相应分支源的SCM插件进行配置。)但是,这些通知有时可能不可靠,或者Jenkins甚至可能无法运行以接收它们。在某些情况下,甚至不可能立即通知,例如,因为Jenkins位于防火墙之后,只能轮询外部系统。
此触发器允许定期回退,但必要时。如果在指定的时间间隔内未执行索引,则将安排索引。例如,在多分支项目的情况下,如果源控制系统未配置推送通知,则设置一个短间隔(大多数人将在15分钟到1小时之间选择)。如果源控制系统配置为推送通知,请设置一个间隔,该间隔对应于当前最后一次提交时推送丢失通知的最大可接受延迟。 (后续提交应该会触发索引并导致提交被提取,因此大多数人会在4小时到1天之间选择。)
这当然意味着分支事件应该重新触发Multibranch Pipeline作业的索引(例如,通过webhook从GitHub推送),但是我的索引日志上的时间戳似乎相信这一点。
那么,我正在观察预期的行为吗?如果是这样,并且我想要定期清理旧分支,是否需要选择“扫描存储库触发器”下的“定期(如果没有运行)”复选框?或者我的设置有什么问题,这会阻止它按预期工作?
答案 0 :(得分:3)
默认情况下,Jenkins不会自动重新索引存储库以进行分支添加或删除(除非使用组织文件夹),因此配置Multibranch管道以定期在配置中重新编制索引通常很有用。
答案 1 :(得分:1)
我依赖于“定期(如果没有另外运行”)1)清理分支机构和2)为全新的回购创建容器作业(我使用“Bitbucket Team / Project”,bitbucket版本的“Github Organization”,其中基本上为组织中的每个仓库创建一个多分支管道。我为每个项目设置为每天运行一次“定期(如果没有其他方式运行”)。
看起来这些东西似乎可以通过webhook工作,但它们并不符合我的经验。