使用多个上游存储库进行测试

md5*_*d5i 6 jenkins jenkins-pipeline

我有一个持续构建和测试场景,我正在尝试弄清楚如何在 Jenkins 中实现,我希望有人能引导我朝正确的方向前进。

我有一个项目foo,它依赖于其他几个上游项目,bar并且baz。所有三个项目都在持续开发中,有 API 更改、随机故障等。我们希望使用上游项目的最新版本,因为它们经常根据我们的要求进行更改。

鉴于bar和的具体已知修订版baz可以与测试foo通过foo,我想要以下内容:

无论何时barbaz发生变化,我都想构建它们并foo针对它们测试构建。如果这些测试通过,我希望bar/的新版本baz成为新的“已知良好”版本。

每当foo发生变化时,我想针对bar和的最新版本进行编译bazbar如果测试通过,则的最新版本baz将成为新的“已知良好”版本。如果测试失败,我想针对bar/的最后一个“已知良好”版本进行编译baz

我们的想法是快速了解上游更改何时导致问题,并继续根据已知良好的上游版本检查项目中的更改。当上游由于上游错误而导致我们的项目失败时,我们希望继续使用最后一个已知的良好版本进行测试。当上游由于 API 更改或行为改进而导致我们的项目失败时,我们希望更新代码来处理这些问题,然后切换到这些新版本以进行将来的构建/测试。

我浏览了 Jenkins Pipeline,乍一看它可能能够处理类似的事情,但我真的不想陷入学习新 DSL(和 Groovy)的兔子洞,如果这是这样的话不太适合我们的问题。

Ale*_*x O 2

您所描述的是两个任务的组合——最好将它们清楚地分开:

  1. 使用测试框架对bar组件进行集成测试bazfoo
  2. 测试框架的更新 foo

集成测试

第一点可以很容易实现:基本上,每当barbaz成功通过其“组件”CI 作业(分别为bar-testbaz-test)时,就会触发foo-test。在 中,选择和 的foo-test版本并测试它们。如果成功,记录这些版本。录音可以采用多种方式,例如barbaz

  • 存储在foo(控制台输出、构建工件)的构建数据中
  • 在您的 SCM 系统中创建一些标签
  • 使用升级的构建插件bar来标记和的构建baz

更新测试框架

点“2”。在这种情况下有点困难,我认为foo-test为了“1”的目的而使用同一个工作是不明智的。和“2.”:这里的目标与集成bar和完全不同baz,尤其是 SCM 方面的处理非常不同。最好创建一个专门的工作 - 例如foo-update- 更新foo必须用于集成bar和的版本baz

这样的工作foo-update可以按如下方式进行:

  • foo每当发生变化时触发执行
  • bar运行时,使用和的最新已知良好版本baz,如任务“1”中所确定。
  • 执行和foo的集成测试。你知道他们之前确实通过了,所以... barbaz
    • 如果测试不再通过,那么这是由于foo. 然后需要手动操作来处理foo,bar或中的问题baz
    • 如果测试通过,则测试框架是兼容的。将新版本记录foo为集成测试“1”中要使用的版本。

foo可以在 SCM 级别再次记录正确的修订版本,也可以通过在 Jenkins 本身中记录它来完成。当然,您的集成测试需要foo-test在执行之前选择该版本。