如何在不影响功能性的情况下将大型 Jenkins 工作/项目拆分为较小的工作?

dan*_*war 5 build-automation eclipse-pde tycho maven jenkins

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

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

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

我们现在正在考虑将项目拆分为与我们提供的功能相对应的更小的作业。看来我们尝试的方法并不是最理想的。

我们尝试了以下方法:

  1. 我们为核心功能创建了一个工作。此作业检查整个 /plugins 和 /tests 目录,并且仅构建该功能所包含的插件。该作业有一个单独的 pom.xml,它定义了核心工件并说明了该功能中包含的模块。
  2. 我们为应该在功能插件上运行的测试创建了一个单独的作业。此作业使用核心作业中克隆的工作区。该作业将在构建核心功能后运行。

我以某种方式认为这不是最佳的。

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

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

编辑:我将尝试制定我认为如果一切正常的话理想情况下会发生的情况:

  • 检查功能组件是否已更改(即可以对其进行更新)
  • 如果更改,则构建该功能
    • 如有必要,构建依赖功能(即检查 ob 相应的作业)
    • 构建功能本身
    • 如果构建成功,则开始功能测试作业
    • 让我看看功能作业中测试作业的结果

最后,项目工作应该

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

此外,如果不需要夜间构建,那就太好了,因为项目功能的构建和测试结果将合并在项目作业结果中。

这样的事情可能吗?

jwe*_*rny 2

从问题的最后开始。我会保留一个单独的夜间工作,进行干净的签出(在签出之前清除任何生成的内容),从头开始构建所有内容,并运行所有测试。如果您没有进行干净的构建,则无法保证签入存储库的内容确实可以构建。

  • 检查功能组件是否已更改(即可以对其进行更新)
  • 如果更改,则构建该功能
    1. 如有必要,构建依赖功能(即检查 ob 相应的作业)
    2. 构建功能本身
    3. 如果构建成功,则开始功能测试作业
    4. 让我看看功能作业中测试作业的结果

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

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

  • 每个单独功能和每个依赖功能(仅构建该功能)的工作。这些作业应通过(相关)功能的 SCM 更改来启动。
  • 我不会将测试作业与编译作业分开。它允许成功编译的代码永远不会被测试。相反,我会依赖这样一个事实:如果 Jenkins 中的构建步骤失败,它通常会中止进一步的构建步骤。

诀窍在于如何将所有这些连接在一起。

假设我们有一个功能,它的构建作业称为F1,它基于 2 个依赖功能DF1.1DF1.2构建,每个功能都有自己的构建作业。

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