我有一个消费者 CI,如果提供者的主分支中的验证测试失败,则该消费者 CI 向主干的合并请求会失败。
我还有一个提供商 CI,如果针对主分支消费者合约的验证测试失败,该 CI 将失败。
如果消费者的主要分支没有发布任何合同,并且提供商的主要分支没有提供者测试(即正在引入新合同),正确的流程应该是什么?
我应该设置@IgnoreNoPactsToVerify,然后首先将提供者合并到main,然后再合并到消费者吗?因为默认情况下如果没有@IgnoreNoPactsToVerify,提供者测试将会失败(也就是说没有找到合约,这是有道理的,因为我只匹配消费者的最新主版本,并且要么根本没有发布合约,要么只是一个来自之前制作的非主分支),所以这告诉我这可能不是正确的设置?
消费者和提供者都是java应用程序,我正在使用pactbroker。我还没有使用环境或记录部署,仅使用分支和标签(发布合同/验证结果时)。
或者也许正确的做法是添加@IgnoreNoPactsToVerify,直到消费者合并到main,然后在提供者方面进行另一次合并以删除@IgnoreNoPactsToVerify?
Pact 是消费者驱动的,因此在预期的设置中,消费者在提供者之前被更改,以便一旦提供者验证运行,协议就可用。
在您的设置中,这可能意味着暂时禁用消费者管道中的提供者验证,并将第一个合约测试推送到主协议并发布第一个协议。 (这可能是一个简单的骨架,隐藏在功能切换后面或在生产中不使用)。
请参阅CI/CD 设置指南,了解从“无协议”到“有分支和 PR 验证的协议”的多次迭代。
但您也可以在提供商上暂时使用
@IgnoreNoPactsToVerify
。还有一个具有类似效果的 pact.verifier.ignoreNoConsumers
系统属性,请参阅 Pact JVM 系统属性。