所以我在考虑这个设置,但我甚至不确定它是否可能。我在一个更大的组织工作,我们想对各种项目执行静态代码分析和单元测试。这些项目都是遵循相同模式的模块,所以为了简单起见,我有30个项目,它们都可以用相同的Jenkinsfile
构建。Jenkinsfile
中唯一的区别是签出阶段的存储库。
现在我在想,是否可以有一个包含Jenkinsfile
的存储库,让其他30个存储库使用该存储库(使用"SCM的管道脚本">)来获取Jenkinsfile
。然后,我将在Checkout
-步骤中的git
命令中使用参数(或其他东西)设置url
-属性。
现在我的问题是:
-
这样的设置可能吗(将
Jenkinsfile
放在与要构建的存储库不同的存储库中) -
如何使用轮询Jenkins还会轮询适当的存储库中的更改(30个不同的存储库之一),还是只轮询一个包含
Jenkinsfile
的存储库(这显然不是我想要的)
如有任何答案、想法或建议,我们将不胜感激。
Q:这样的设置可能吗?(将Jenkinsfile放在与要构建的存储库不同的存储库中)
A: 是的。你可以指定詹金斯来获得你想要的任意数量的回购。
Q:这将如何与轮询配合使用?Jenkins还会轮询适当的存储库中的更改吗(30个不同的存储库之一),还是只轮询包含Jenkinsfile的一个存储库(这显然不是我想要的)
A: 它将轮询拥有詹金斯文件的scm。如果您将更改添加到Jenkinsfile,这一点非常重要。为了解决这个问题(因为你指定了这是你不想要的行为),你可以在你的回购中添加提交挂钩或代币,如果回购发生变化或其他情况发生,这些挂钩或代币基本上会启动詹金斯的工作(这取决于你使用的回购托管工具,即Github与gitlab与bitbucket等)。否则,你也可以手动启动,但自动方式听起来就像你想要的。
关于的实施
-
这可以通过多分支管道来完成。为jenkinsfiles的所有变体提供一个存储库,每个分支都有您提到的定义
git scm <repo>
。这样,你也可以在每个存储库中都有令牌/挂钩,这样,如果在repo中发生任何事情,相应的工作将自动启动。一个次要的问题是,你可能在Jenkinsfile存储库中有30多个分支(或者根据你的repo数量有多少分支) -
当然,您也可以执行上面提到的操作,让Jenkinsfile作业为它将使用的repo取一个参数。我的团队有这样的工作,您可以指定
git_url
和git_treeish
(分支),以便将其指向master或您的个人fork进行测试。需要注意的是,每个构建都可能有不同的结果或工件,如果repo产生类似的工件或结果,你必须在每个构建的基础上检查构建参数,以了解你在看什么。(例如:如果您正在运行测试,则您的测试结果聚合可能不清楚,因为一个生成具有来自Project/Repo A的结果,而另一个生成则具有来自Project/Repo B等的结果)。如果您正在将工件/结果转发到另一个作业,这不会有太大问题,您可以基于最初提供的repo参数来进行后期构建过程。
如果你有更多的细节评论,我可以给你一些代码片段,或者如果你需要的话,发布一个带有示例的要点。
这应该使用共享库来完成。这使得一切工作都很容易,包括轮询,但集中了代码。您仍然需要能够触摸每个项目,以便在每个repo中放入一个Jenkinsfile,但该Jenkinsfle可以是对共享库的最小调用。
这是一个优雅的解决方案,因为每个repo都可以根据需要设置一些特定于项目的变量,然后进行调用。如果你有能力在每个回购中放入一个Jenkinsfile,这就是方法