【问题标题】:Should branch indexing for Multibranch Pipeline jobs be triggered automatically by webhooks?多分支管道作业的分支索引是否应该由 webhook 自动触发?
【发布时间】:2017-05-10 14:36:10
【问题描述】:

我已经在 J​​enkins 中设置了许多多分支管道作业(运行 2.46.2 LTS、分支 API 2.0.8、GitHub 分支源 2.0.5 和管道多分支 2.14)并且刚刚注意到分支索引 -因此对旧分支的任何清理——似乎都不是由来自 GitHub 的 webhook 调用触发的。只有当有人手动单击“立即扫描存储库”链接,或者重新保存 Jenkins 中的作业配置时,才会触发它。我使用“扫描存储库日志”页面中显示的时间戳作为分支索引发生时间的指示。

似乎新分支或对现有分支的更改被正确检测并构建,因此来自源代码控制 (GitHub) 的 webhook 正在工作,但令人惊讶的是这并没有触发分支索引,因此没有触发旧分支清理。我只是无法从 documentation 判断这是否是正确的预期行为,或者我的设置是否有问题。

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

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

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

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

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

【问题讨论】:

  • 我遇到了类似的问题,因为我有一个指向 Lambda 函数的 github webhook(而不是 Jenkins 服务器/github-webhook)。结果,Jenkins 无法发现新创建的 PR 分支。我必须手动扫描 repo 才能发现。一旦发现分支,我的 Lambda 就能够正确触发构建。所以我的问题是 - 如何在 Python 中触发 Jenkins 的分支重新索引或分支发现?还是有一些设置可以做到这一点?没有指向 Jenkins 服务器的 github webhook?

标签: jenkins multibranch-pipeline


【解决方案1】:

根据official documentation

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我不想定期执行此操作,而是想使用 AWS lambda 函数来检测新的 PR 事件,然后触发重新索引。那可能吗?知道怎么做吗?
    猜你喜欢
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多