如何在不影响功能的情况下将大詹金斯的工作/项目拆分成较小的工作?

时间:2012-05-03 13:50:08

标签: maven jenkins build-automation eclipse-pde tycho

我们正在尝试改进我们的Jenkins设置。到目前为止,我们有两个目录:/ plugins和/ tests。

我们的项目是Eclipse Plugins的一个多模块项目。 / tests文件夹中的测试插件是片段项目,取决于/ plugins中相应的生产代码插件。

到目前为止,我们只有一个Jenkins工作,检查了/ plugins和/ tests,构建了所有这些并生成了Surefire结果等。

我们现在正考虑将项目拆分为与我们提供的功能相对应的较小作业。似乎我们尝试这样做的方式并不理想。

我们尝试了以下方法:

  1. 我们为核心功能创建了一份工作。此作业检出整个/ plugins和/ tests目录,并仅构建该功能所包含的插件。这个作业有一个单独的pom.xml,它定义了核心工件并讲述了该功能中包含的模块。
  2. 我们为应该在功能插件上运行的测试创建了一个单独的作业。此作业使用核心作业中的克隆工作区。在构建核心功能之后运行此作业。
  3. 我认为这不是最佳选择。

    • 例如,只有核心作业可以更新签出的文件。如果仅更新测试,则不需要再次构建核心功能,但它将是。
    • 一旦我有一个依赖于核心功能的功能,这个功能要么需要使用核心功能工作区的克隆,要么检查自己的/ plugins和/ tests副本,这会导致膨胀
    • 使用克隆的工作区,我无法更新我的来源。因此,当我有一个功能取决于另一个功能时,我只能在更新和构建核心功能时完成这项工作。

    我想我在这里缺少一些基本的东西。有人可以帮忙吗?肯定有一种更简单的方法。

    编辑:如果一切正常,我会尝试制定我认为最理想的事情:

    • 检查功能组件是否已更改(即可以对其进行更新)
    • 如果更改,请构建该功能
      • 如有必要,建立相关功能(即检查ob相应的工作)
      • 自行构建功能
      • 如果构建成功,则启动功能测试作业
      • 让我看一下功能作业中的测试作业结果

    最后,项目工作应该

    • 每晚做一次
    • 查看/ plugins和/ tests
    • 中的所有来源
    • 构建全部,全部测试,将结果发送给Sonar

    此外,如果不需要每晚构建,那将是很好的,因为项目功能的构建和测试结果将合并到项目作业结果中。

    这样的事情可能吗?

1 个答案:

答案 0 :(得分:2)

从问题的结尾开始。我会保持一个单独的夜间工作,做一个干净的检查(在退房前摆脱任何生成的东西),从头开始构建一切,并运行所有测试。如果您没有进行干净的构建,则无法保证检查到存储库的内容是否真正构建。

  
      
  • 检查功能组件是否已更改(即可以对其进行更新)
  •   
  • 如果更改,请构建该功能   
        
    1. 如有必要,建立相关功能(即检查ob相应的工作)
    2.   
    3. 自行构建功能
    4.   
    5. 如果构建成功,则启动功能测试作业
    6.   
    7. 让我看一下功能作业中的测试作业结果
    8.   
  •   

[我假设1中的“依赖特征”是指2中“特征”所需的东西。]

要做到这一点,我会说你有多个工作。

  • 为每个单独的功能和每个依赖功能创建该功能的作业。应该通过(依赖)功能的SCM更改来启动作业。
  • 我不会将单独的测试作业与编译作业保持一致。它允许从未测试成功编译的代码的可能性。相反,我会依赖于在Jenkins中构建步骤失败的事实,它通常会中止进一步的构建步骤。

诀窍在于如何将所有这些组合在一起。

假设我们有一个功能,它的构建工作名为 F1 ,它基于2个相关功能构建 DF1.1 DF1.2 ,每个都有自己的构建工作。

  • DF1.1 DF1.2 都应配置为触发 F1 的构建。
  • F1 应配置为从最新的成功 DF1.1 DF1.2 版本中获取所需的工件。不幸的是,非常好的“克隆SCM”插件在这里不会有太多帮助,因为它只能从之前的一个工作中获得。也许其中一个工件发布者插件可能很有用,或者您可能需要添加一些自定义构建步骤来放置/获取工件。