问:这样的设置是否可能?(将 Jenkinsfile 放在与您要构建的存储库不同的存储库中)。
答:是的。您可以指定 Jenkins 拉入任意数量的存储库。
问:这将如何与投票一起使用?Jenkins 是否仍会轮询适当的存储库以进行更改(30 个不同的存储库之一),还是仅轮询包含 Jenkinsfile 的一个存储库(这显然不是我想要的)。
A:它会轮询拥有 Jenkinsfile 的 scm。如果您向 Jenkinsfile 添加更改,这一点很重要。为了解决这个问题(因为您指定这是您不想要的行为),您可以在您的 repo 中添加提交钩子或令牌,如果 repo 更改或发生其他情况(它取决于什么 repo您正在使用的托管工具,即 Github vs gitlab vs bitbucket 等)。否则,您也可以手动启动它,但自动方式听起来像您想要的。
至于执行
这可以通过多分支管道来完成。为 jenkinsfiles 的所有变体提供一个存储库,每个分支都有git scm <repo>
您提到的定义。这样,您还可以在每个中都有令牌/挂钩,以便如果在 repo 中发生任何事情,相应的工作将自动启动。与此相关的一个小问题是,您可能在 Jenkinsfile 存储库中有 30 多个分支(或者取决于您拥有的存储库数量)
你当然也可以做你上面提到的事情,让 Jenkinsfile 作业为它将使用的 repo 获取一个参数。我的团队有这样的工作,您可以在其中指定git_url
和git_treeish
(分支),以便您可以将其指向 master 或您的个人 fork 进行测试。需要注意的是,每个构建都可能有不同的结果或工件,您必须在每个构建的基础上检查构建参数,以了解您正在查看的存储库是否产生类似的工件或结果。(例如:如果您正在运行测试,您的测试结果聚合可能不清楚,因为一个构建有来自项目/回购 A 的结果,而另一个构建有来自项目/回购 B 等的结果)。如果您将工件/结果转发到另一个工作,这不会有太大问题,您可以将构建后过程基于您最初提供的 repo 参数。
如果您评论更多详细信息,我可以给您一些代码片段,或者在您需要时发布带有示例的要点。