如何在不破坏 Pact 合同的情况下向提供者和消费者代码添加新功能?

How to add new features to the provider & consumer code without breaking the Pact contract?

管道

我正在努力使我的管道尽可能接近 pact nirvana,减去部署测试,因为我仍在使用该技术。

注意,我使用的是 broker 的开源版本,而不是 pactflow。

提供商管道

消费者管道

问题

当我尝试构建新功能时,这会崩溃。

假设我创建了一个更改,通过更改提供者对非常不同的事物的响应(想象它是消费者的新功能)来打破消费者和提供者之间的契约。这显然在管道内的验证步骤失败,因为我们正在根据生产标记的消费者检查它。

然后我们更改消费者模拟(和代码)以使用这个新响应。然后我们推送到启动 CI 的 repo 并在验证步骤失败,因为我们正在针对生产标记提供程序(不是具有功能分支名称的最新标记)进行测试。

我们显然总是希望针对生产标记的对应项(与 can-i-deploy 相同)进行验证,以防我在消费者或提供者代码库中意外创建重大更改。

所以我们遇到了 22 条军规问题;我们如何在不破坏推荐管道的情况下添加消费者和提供者代码都需要修改的新功能?

https://docs.pact.io/faq#how-can-i-make-a-breaking-change-to-a-provider

如果您需要对提供程序进行重大更改,您可以使用扩展和收缩模式在多步过程中完成。

将新的 fields/endpoints 添加到提供程序并进行部署。 更新消费者以使用新的 fields/endpoints,然后部署。 从提供程序中删除旧的 fields/endpoints 并部署。 在流程的每一步,所有合约测试都保持绿色。消费者驱动的合同很好地支持这种模式,因为供应商很容易确定 if/when 所有消费者都通过在本地开发环境中删除旧字段来放弃使用旧字段,并且 运行 契约验证测试。