为多个 Git (GitHub) 存储库重用一个 Jenkins 作业

Posted

技术标签:

【中文标题】为多个 Git (GitHub) 存储库重用一个 Jenkins 作业【英文标题】:Reuse one Jenkins jobs for multiple Git (GitHub) repositories 【发布时间】:2019-02-26 15:07:55 【问题描述】:

我有一个非常简单的 Jenkins 构建,它是多个存储库所需要的。所有这些存储库都有相同的组织、相同的分支等。除了存储库名称之外没有区别。

每个存储库都应该能够触发仅针对该特定存储库的构建。我想像将 parameterized build 与包含存储库名称查询参数的 WebHook URL 组合起来的事情。

对此有什么想法或建议吗?

【问题讨论】:

我会使用捆绑在全局共享库中的通用代码来使用流水线作业方法,如下所示。事实上,我们已经在这样做了。 那是否还需要为新存储库手动添加新作业? 我了解您希望 Jenkins 自动从新存储库构建项目? 是的,存储库提交应该触发新的构建。实际上,我需要的是类似于使用源存储库作为轴的矩阵作业。我还可以使用 YAML 或 JSON 文件返回存储库名称数组和使用此文件的管道作业。但这将是一个简单且非常愚蠢的循环,每次都构建所有存储库。缺少的部分是每个单独的存储库都应该触发相应的构建作业(或一个带有标识存储库的参数的常见作业)。 您可以有一个播种机作业,使用作业 DSL 循环存储库并使用相同的共享代码创建管道作业。我真的不建议在同一个工作中交替构建不同的存储库,因为这会完全混淆构建历史并使其几乎无用。我还可以考虑拥有一个始终并行或顺序构建所有存储库的单个管道作业。但是您仍然需要为每个存储库添加一个新行。对于 Bitbucket,您可以让 Jenkins 自动创建新作业。不确定这是否也适用于 GitHub。 【参考方案1】:

我们通过创建 Jenkins 构建模板并基于此模板为每个 url 配置每个作业来实现它

我们可以为一个作业配置参数,但没有采用这种方法,因为我们需要检查每个构建的参数,所以很难知道哪个 git repo 失败了

可以使用以下插件https://wiki.jenkins.io/display/JENKINS/Template+Project+Plugin创建模板

【讨论】:

【参考方案2】:

在做了更多研究之后,我想我会尝试“GitHub 组织”工作类型。它会扫描给定 GitHub 组织或所有者的所有存储库,并自动管理相应的作业。

【讨论】:

这种方法效果很好,无需编写额外的播种机作业。【参考方案3】:

我在某处读到过一个组织,他们将大多数标准管道放入综合共享库中。 This article 是一本很好的读物。

我自己的公司使用“Seedjobs”创建多个流水线,并且只有一项工作。阅读 this article 了解有关该想法的概述。

【讨论】:

【参考方案4】:

我知道这个问题已经得到解答,但是还有另一种简单的方法可以从多个 GitHub URL 触发单个作业。

您可以使用Generic Webhook Trigger Plugin 从不同的 GitHub 存储库构建相同的作业。您需要为 Job 分配唯一的 token,并将多个 GitHub 存储库的 Webhook 配置为:

JENKINS_URL/generic-webhook-trigger/invoke?token=TOKEN_NAME

【讨论】:

以上是关于为多个 Git (GitHub) 存储库重用一个 Jenkins 作业的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Git 存储库中删除多个已删除的文件

如何为具有共享代码库的多个项目正确设置 git?

为不同的 GitHub 帐户使用多个 SSH 密钥

如何将多个 Git 存储库合并为一个并交错历史

更改 Git/GitHub 存储库的作者姓名和电子邮件,为所有提交保留时间戳

SAP Commerce Cloud Github 仓库管理规范