如何强制契约生产者验证特定的合同版本?

时间:2020-10-09 16:38:51

标签: java maven pact

我有一个消费者生成了Pact合同的第一个版本,并将其上载到经纪人。生产者验证了合同和验证已发布给经纪人。

现在我想延长合同。当我将更新的合同发布给经纪人并随后在生产者端运行验证时,由于尚未实现合同履行API,因此它失败了。我想先更新合同,然后发布它,并避免破坏生产者的构建(即不要在锁步中修改消费者和生产者)。

如何对消费者/生产者/合同进行版本管理,以便我可以在生产者中指定它当前与特定的消费者/合同版本兼容?

我在Maven中使用了Pact JVM / Java(版本3)。 pom.xml中没有项目版本控制-只是1.0.0-SNAPSHOT版本。 Pact Maven插件中配置的projectVersion与Maven项目版本-1.0.0-SNAPSHOT相同。

我应该玩projectVersiontags吗?我应该升级到Pact版本4并使用consumer version selectors吗?

1 个答案:

答案 0 :(得分:0)

所以我想您是在问如何有效地将Pact测试添加到CI / CD管道和功能开发工作流程中?

  1. Effective pact setup guide
  2. CI/CD workshop

第一个文档解释了一般方法,而(2)是一个可以实施这些步骤的研讨会(在JS中)。无论您使用哪种语言(以Java为例),其原理都是相同的。

但是,具体来说,您肯定需要使用标签来防止新功能tags破坏您的提供商的主要构建(例如,由消费者创建的featureA不会破坏仅看起来是例如productiondevelopment

您可能还希望查看待处理的协议(请参阅https://docs.pact.io/pendinghttps://docs.pact.io/implementation_guides/jvm/provider/junit5/#pending-pact-support-version-410-and-later),这是一个较新的功能,可以防止新合同破坏提供者。

版本

因此,您需要在代码中添加更多特定版本,以有效利用Pact(以及代理提供的工作流程)。您可以使用pact.provider.version系统属性(例如System.setProperty("pact.provider.version", "some git sha");)进行指定

我们recommend在该版本中使用您的版本控制SHA。