我有一个标准的 Jenkins 作业,需要为对我添加到配置中的多个 SCM 插件中的任何 x 存储库发出的任何拉取请求/提交触发该作业。
有没有办法在所有存储库上挂一个钩子,以便在对任何存储库的拉取请求上,作业会构建发出拉取请求的特定存储库?
这将很有帮助,因为当我可以为所有存储库提供一个作业时,我不需要每个存储库 1 个作业。
各种 GitHub 存储库的 webhook 和服务中设置了 Jenkins url,Jenkins 将被该 webhook 调用。
但是 Jenkins GitHub 插件只会触发 "Github project
" 具有正确git@github.com:Person/Project.git
存储库的作业。
一种可能的解决方法是:
- 在 GitHub 上发布一个父存储库,该存储库将所有其他存储库声明为子模块;
- 在其他存储库上设置另一个 Webhook,以便在父存储库中触发
git submodule update --remote
(以刷新所有子模块 gitlinks SHA1,索引中的特殊条目)并将该父存储库推送回 GitHub; - 有一个 Jenkins 作业,该作业监视(通过 GitHub 插件及其 webhook)唯一的 GitHub 父存储库;
- 有一个比较
GIT_COMMIT
和GIT_PREVIOUS_COMMIT
的构建步骤,以确定哪个子文件夹(子模块)刚刚更改,并仅在该子文件夹或这些子文件夹上启动构建。
使用 Jenkins Pipelines 是可能的。
您可以通过结帐内置步骤指定任意数量的 SCM 位置。在这种情况下,Jenkins 会"知道"它必须在任何源存储库中修改时重建管道。当然,应该启用 Git 钩子来实现它。