2017-10-18 89 views
1

所以我正在考虑这个设置,但我甚至不确定它是否可行。我在一个更大的组织中工作,我们想要对各种项目进行静态代码分析和单元测试。这些项目都是遵循相同模式的模块,所以我们假设为了简单起见,我有30个项目都可以使用相同的Jenkinsfile构建。 Jenkinsfile唯一的区别是在结帐阶段的存储库。Jenkins:从另一个存储库加载Jenkinsfile,而不是我想要构建的存储库

现在我在想,如果有可能有1个库包含Jenkinsfile,并有其他30个库使用存储库(使用“管道脚本SCM”)来获取Jenkinsfile。然后,我将使用参数(或其他)将属性设置为git命令中的步骤Checkout

现在我的问题:

  • 是这样的设置甚至可能吗?(将Jenkinsfile放在与要构建的存储库不同的存储库中)。
  • 这将如何与投票工作?詹金斯仍然会调查适当的变更存储库(30个不同的存储库之一),还是只轮询包含Jenkinsfile(这不是我想要的)的存储库。

任何答案,想法或建议将不胜感激。

+0

任何使用'checkout'在Jenkinsfile中签出的内容都会自动包含在轮询中,除非您使用'checkout poll:false,scm:'明确地关闭它' – badgerr

回答

0

这应该用共享库来完成。这使得一切都很简单,包括轮询,但集中了代码。您仍然必须能够触摸每个项目才能在每个回购站中放置一个Jenkinsfile,但是Jenkinsfile可以是对共享库的最小调用。

这是一个优雅的解决方案,因为每个回购可以根据需要设置一些项目特定的变量,然后进行调用。如果您有能力在每个回购中放入Jenkinsfile,则可以这样做。

1

问:这样的设置甚至可能吗? (将Jenkinsfile放在与您要构建的存储库不同的存储库中)。

答:是的。您可以指定詹金斯根据需要提取尽可能多的回购。

问:这将如何与投票?詹金斯是否仍然在调查适当的存储库以进行更改(30个不同的存储库中的一个),还是只轮询包含Jenkinsfile的存储库(这不是我想要的)。

答:它会查询具有Jenkinsfile的scm。如果您将更改添加到Jenkins文件中,这一点很重要。为了解决这个问题(因为你指定这是你不想要的行为),你可以在你的仓库中添加提交钩子或标记,如果回购更改或其他情况发生时(基于什么回购托管工具,即Github vs gitlab vs bitbucket等)。否则,你也可以手动启动它,但自动化的方式听起来像你想要的。


至于实施

  • 这可能与多支管道来完成。为jenkinsfiles的所有变体提供一个存储库,并且每个分支都有您提到的定义git scm <repo>。这样,你也可以在每个对象中使用令牌/钩子,这样如果回购中发生任何事情,相应的作业将自动启动。其中一个小问题是你可能在Jenkinsfile库中有30多个分支(或者很多,这取决于你拥有的回购数量)

  • 你也可以肯定地做你刚才提到的Jenkinsfile工作采取什么样的回购它将使用的参数。我的团队有这样的职位,您可以指定git_urlgit_treeish(分支),以便您可以将其指向主人或您的个人分支进行测试。需要注意的是,每个构建都可能具有不同的结果或工件,并且您必须在每个构建基础上检查构建参数,以了解如果回购制作类似的工件或结果,您正在查看哪些内容。 (例如:如果您正在运行测试,您的测试结果汇总可能不明确,因为一个生成结果来自Project/Repo A,而另一个生成结果来自Project/Repo B等)。如果您将工件/结果转发给其他工作,这不会有太大问题,您可以将后期构建过程建立在最初提供的repo参数上。

如果您有更多的细节发表评论,我可以给你一些代码片段或张贴要点与例子,如果你需要任何。

相关问题