【发布时间】:2018-10-12 12:09:38
【问题描述】:
是否可以将 Spring Cloud Contract Producer 验证发布到 Pact 代理?
【问题讨论】:
标签: spring-cloud spring-cloud-contract
是否可以将 Spring Cloud Contract Producer 验证发布到 Pact 代理?
【问题讨论】:
标签: spring-cloud spring-cloud-contract
您必须将 DSL 转换为 Pact 文件,然后推送这些文件。所以在技术上这是可能的。
更新:我们在文档中描述了如何执行此操作 - https://cloud.spring.io/spring-cloud-contract/reference/html/howto.html#how-to-generate-pact-from-scc
因为在 SO 中,“检查文档”的答案似乎不被接受,让我复制粘贴文档
- 如何从 Spring Cloud Contract Contracts 生成 Pact、YAML 或 X 文件?
Spring Cloud Contract 带有一个 ToFileContractsTransformer 类,可让您将合同转储为给定 ContractConverter 的文件。它包含一个静态 void main 方法,可让您将转换器作为可执行文件执行。它采用以下参数:
argument 1 : FQN: Fully qualified name of the ContractConverter (for example, PactContractConverter). REQUIRED.
argument 2 : path: Path where the dumped files should be stored. OPTIONAL — defaults to target/converted-contracts.
argument 3 : path: Path were the contracts should be searched for. OPTIONAL — defaults to src/test/resources/contracts.
执行转换器后,Spring Cloud Contract 文件被处理,并根据提供的 ContractTransformer 的 FQN,将合同转换为所需的格式并转储到提供的文件夹中。
以下示例显示了如何为 Maven 和 Gradle 配置 Pact 集成:
行家
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>convert-dsl-to-pact</id>
<phase>process-test-classes</phase>
<configuration>
<classpathScope>test</classpathScope>
<mainClass>
org.springframework.cloud.contract.verifier.util.ToFileContractsTransformer
</mainClass>
<arguments>
<argument>
org.springframework.cloud.contract.verifier.spec.pact.PactContractConverter
</argument>
<argument>${project.basedir}/target/pacts</argument>
<argument>
${project.basedir}/src/test/resources/contracts
</argument>
</arguments>
</configuration>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
</plugin>
分级
task convertContracts(type: JavaExec) {
main = "org.springframework.cloud.contract.verifier.util.ToFileContractsTransformer"
classpath = sourceSets.test.compileClasspath
args("org.springframework.cloud.contract.verifier.spec.pact.PactContractConverter",
"${project.rootDir}/build/pacts", "${project.rootDir}/src/test/resources/contracts")
}
test.dependsOn("convertContracts")
在build/pacts 或target/pacts 生成文件后,您可以使用 Pact Gradle / Maven 插件将这些文件上传到代理。
【讨论】: