我们正在努力改进我们的Jenkins设置.到目前为止,我们有两个目录:/ plugins和/ tests.
我们的项目是Eclipse Plugins的一个多模块项目. / tests文件夹中的测试插件是片段项目,它们依赖于/ plugins中相应的生产代码插件.
到目前为止,我们只有一个Jenkins工作,它检查了/ plugins和/ tests,构建了所有这些并生成了Surefire结果等.
我们现在正在考虑将项目拆分为与我们提供的功能相对应的较小的工作.似乎我们尝试这样做的方式不是最理想的.
我们尝试了以下方法:
>我们为核心功能创建了一份工作.此作业检出整个/ plugins和/ tests目录,并仅构建该功能所包含的插件.这个作业有一个单独的pom.xml,它定义了核心工件并讲述了该功能中包含的模块.
>我们为应该在功能插件上运行的测试创建了一个单独的作业.此作业使用核心作业中的克隆工作区.在构建核心功能之后运行此作业.
我不知何故认为这不是最优的.
>例如,只有核心作业可以更新签出的文件.如果仅更新测试,则不需要再次构建核心功能,但它将是.
>只要我有一个依赖于核心功能的功能,该功能就需要使用核心功能工作区的克隆,或者检查自己的/ plugins和/ tests副本,这会导致膨胀.
>使用克隆的工作区,我无法更新我的源.因此,当我有一个功能取决于另一个功能时,我只能在更新和构建核心功能时完成工作.
我想我在这里缺少一些基本的东西.有人可以帮忙吗?肯定有一种更简单的方法.
编辑:如果一切正常,我会尝试制定我认为最理想的事情:
>检查功能组件是否已更改(即可以对其进行更新)
>如果更改,请构建该功能
>如有必要,建立相关功能(即检查ob相应的工作)
>自己构建功能
>如果构建成功,则启动功能测试作业
>让我看一下功能作业中测试作业的结果
最后,项目工作应该
>做一个夜间建设
>查看/ plugins和/ tests中的所有来源
>构建所有,测试所有,将结果发送到Sonar
此外,如果每晚构建是不必要的,那将是很好的,因为项目的功能的构建和测试结果将组合在项目作业结果中.
这样的事情可能吗?
最佳答案 从问题的结尾开始.我会保持一个单独的夜间工作,做一个干净的检查(在退房前摆脱任何生成的东西),从头开始构建一切,并运行所有测试.如果您没有进行干净的构建,则无法保证检查到存储库的内容是否真正构建.
- check if the feature components have changed (i.e. an update on them is possible)
- if changed, build the feature
- Build the dependent features, if necessary (i.e. check ob corresponding job)
- Build the feature itself
- if build successful, start feature test job
- let me see the results of the test job in the feature job
[我假设1中的“依赖特征”是指2中“特征”所需的东西.]
要做到这一点,我会说你有多个工作.
>为每个单独的功能和每个依赖功能创建一个简单构建该功能的作业.应该通过(依赖)功能的SCM更改来启动作业.
>我不会将单独的测试作业与编译作业保持一致.它允许从未测试成功编译的代码的可能性.相反,我会依赖于Jenkins构建步骤失败的事实,它通常会中止进一步的构建步骤.
诀窍在于如何将所有这些组合在一起.
假设我们有一个功能,它的构建工作名为F1,它基于2个相关功能DF1.1和DF1.2构建,每个功能都有自己的构建作业.
> DF1.1和DF1.2都应配置为触发F1的构建.
> F1应配置为从最新成功的DF1.1和DF1.2构建中获取所需的工件.不幸的是,非常好的“克隆SCM”插件在这里不会有太多帮助,因为它只能从之前的一个工作中获得.也许其中一个工件发布者插件可能很有用,或者您可能需要添加一些自定义构建步骤来放置/获取工件.