消费方拥有契约
消费方知道自己需要什么,故由其写 pact。提供方据之验证。破坏消费方期望的提供方变更使提供方构建失败,而非消费方。
new Interaction()
.uponReceiving('a request for a user')
.withRequest({ method: 'GET', path: '/users/1' })
.willRespondWith({ status: 200, body: { id: 1 } });
发布并验证
消费方 CI 把 pact 发布到 broker。提供方 CI 拉取并验证。broker 是汇合点,双方不直接对话。
pact-broker can-i-deploy --pacticipant consumer --version $VERSION
仅兼容时部署
任一方部署前跑 can-i-deploy,未验证兼容即阻断部署。用生产版本打标 broker,回滚时对正确 pact 验证。
验证
破坏性变更使提供方构建失败,can-i-deploy 阻断不兼容部署,broker 显示已验证矩阵。每次提供方构建都验证而非定时,使失败落在合并前。旧 pact 版本按保留策略归档。