2

我在 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) 的 webhook 正在工作,但令人惊讶的是这并没有触发分支索引,因此没有触发旧分支清理。我只是无法从文档中判断这是否是正确和预期的行为,或者我的设置中是否存在不正确的地方。

我注意到“如果不以其他方式运行,则定期运行”设置的帮助文本说:

某些类型的文件夹会在收到外部事件后立即自动重新索引。例如,当收到 SCM 更改通知时,多分支项目将重新检查其 SCM 存储库中是否有新的或删除的或修改的分支。(可以根据用于每个相应分支源的 SCM 插件配置推送通知。)但是,此类通知有时可能不可靠,或者 Jenkins 甚至可能没有运行来接收它们。在某些情况下,甚至不可能立即通知,例如因为 Jenkins 位于防火墙后面并且只能轮询外部系统。

此触发器允许定期回退,但在必要时。如果在指定的时间间隔内没有执行索引,则将安排索引。例如,在多分支项目的情况下,如果源代码控制系统未配置推送通知,请设置较短的间隔(大多数人会选择 15 分钟到 1 小时之间)。如果源代码控制系统配置为推送通知,请将与丢失推送通知事件中可接受的最大延迟相对应的时间间隔设置为当天的最后一次提交。(后续提交无论如何都应该触发索引并导致提交被拾取,所以大多数人会在 4 小时到 1 天之间选择。)

这当然意味着多分支管道作业的索引应该由分支事件重新触发(例如,通过 webhook 从 GitHub 推送),但我的索引日志上的时间戳似乎与此不符。

那么,我正在观察预期的行为吗?如果是这样,并且我想要定期清理旧分支,是否需要选中“扫描存储库触发器”下的“如果不运行,则定期运行”复选框?还是我的设置有问题,导致它无法按预期工作?

4

2 回答 2

4

根据官方文档

默认情况下,Jenkins 不会自动为分支添加或删除重新索引存储库(除非使用组织文件夹),因此配置多分支管道以在配置中定期重新索引通常很有用。

于 2017-06-08T18:57:40.447 回答
1

我依靠“定期运行”来完成 1)清理分支和 2)为全新的存储库创建容器作业(我使用“Bitbucket Team/Project”,即“Github 组织”的 bitbucket 版本,它基本上创建了一个组织中每个存储库的多分支管道)。我将“如果不以其他方式运行,则定期运行”设置为每个项目每天运行一次。

这些东西似乎确实可以通过 webhook 工作,但根据我的经验,它们不能。

于 2017-05-11T04:08:41.727 回答