Как запускать локальные контракты с помощью бегуна заглушек Spring Cloud Contract

Я определил несколько контрактов Spring Cloud, которые я упаковал в jar, используя gradle verifierStubsJar. Я хотел бы запустить заглушки в этой банке с помощью jar-файл-заглушка Spring Cloud Contract. Я не хочу публиковать банку с заглушками в репозитории артефактов, таком как Artifactory или локальный репозиторий Maven. Я просто хочу запустить заглушки. Как передать местоположение банки, содержащей мои заглушки, банке бегунка заглушек?


person lxdr    schedule 16.01.2020    source источник


Ответы (2)


Если вы используете gradle generateClientStubs:

curl -Lo stub-runner.jar https://search.maven.org/remotecontent?filepath=org/springframework/cloud/spring-cloud-contract-stub-runner-boot/2.2.1.RELEASE/spring-cloud-contract-stub-runner-boot-2.2.1.RELEASE.jar

java -Djava.security-egd=/dev/./urandom -Dstubrunner.repositoryRoot=stubs://file://absolute/path/to/build/stubs -Dstubrunner.ids=com.company-contract:stubs:8081 -Dstubrunner.stubs-mode=REMOTE -jar stub-runner.jar

Если вы используете gradle verifierStubsJar:

curl -Lo stub-runner.jar https://search.maven.org/remotecontent?filepath=org/springframework/cloud/spring-cloud-contract-stub-runner-boot/2.2.1.RELEASE/spring-cloud-contract-stub-runner-boot-2.2.1.RELEASE.jar

java -cp stub-runner.jar:build/libs/my-contract-stubs.jar -Djava.security-egd=/dev/./urandom -Dstubrunner.ids=com.company:my-contract:stubs:8081 -Dstubrunner.stubs-mode=CLASSPATH org.springframework.boot.loader.JarLauncher

Попытки:

  • При использовании gradle generateClientStubs не забывайте ведущую косую черту в абсолютном URI вашего каталога заглушек. например stubs://file:///User/me/my-contracts-project/build/stubs.

  • Средство выполнения заглушек запускает сервер на порту 8080, поэтому вы должны запускать свои заглушки на другом порту. Вы можете изменить порт, на котором запускается программа-заглушка, с помощью обычного -Dserver.port.

person lxdr    schedule 17.01.2020

Если вы читаете документы, вы найдете этот раздел https://cloud.spring.io/spring-cloud-contract/reference/html/project-features.html#features-stub-runner-stubs-protocol

Вместо того, чтобы выбирать заглушки или определения контрактов из Artifactory / Nexus или Git, можно просто указать место на диске или в пути к классам. Это может быть особенно полезно в многомодульном проекте, когда один модуль хочет повторно использовать заглушки или контракты из другого модуля без необходимости фактической установки их в локальном репозитории maven для фиксации этих изменений в Git.

Для этого достаточно использовать протокол stubs: //, когда корневой параметр репозитория установлен либо в Stub Runner, либо в плагине Spring Cloud Contract.

В этом примере продюсерский проект был успешно построен, и в папке target / stubs были созданы заглушки. Как потребитель, можно настроить Stub Runner, чтобы он выбирал заглушки из этого места, используя протокол stubs: //.

@AutoConfigureStubRunner (stubsMode = StubRunnerProperties.StubsMode.REMOTE, repositoryRoot = "stubs: // file: // location / to / the / provider / target / stubs /", ids = "com.example: some-maker")

Контракты и заглушки могут храниться в месте, где у каждого производителя есть собственная выделенная папка для контрактов и сопоставлений заглушек. В этой папке у каждого потребителя может быть своя настройка. Чтобы Stub Runner находил выделенную папку из предоставленных идентификаторов, можно передать свойство stubs.find-продюсера = true или системное свойство stubrunner.stubs.find-продюсер = true.

@AutoConfigureStubRunner (stubsMode = StubRunnerProperties.StubsMode.REMOTE, repositoryRoot = "stubs: // file: // location / to / the / contract / directory", ids = "com.example: some -pumer", properties = "stubs. найти-продюсер = истина ")

person Marcin Grzejszczak    schedule 16.01.2020
comment
Как мне это сделать с банкой-заглушкой? Мои контракты находятся в своем собственном месте отдельно от потребителя и производителя. В этом случае я не использую JUnit для запуска заглушек. Я пытаюсь сделать что-то вроде: java -Dstubrunner.ids=com.myname:my-contracts:8080:stubs -Dstubrunner.stubs-mode=CLASSPATH -jar stub-runner.jar. Проблема здесь в том, что банка, содержащая мои заглушки, на самом деле не находится в пути к классам. И флаг -cp не работает с -jar. - person lxdr; 16.01.2020
comment
Прочтите этот раздел документации cloud.spring.io/spring-cloud-contract/reference/html/ - person Marcin Grzejszczak; 16.01.2020
comment
Я пытаюсь сделать что-то похожее на раздел Использование заглушек контрактов Spring Cloud на стороне потребителя в это руководство. Но вместо того, чтобы получать заглушки из Artifactory, я хочу получить их из локальной банки. - person lxdr; 16.01.2020
comment
Пожалуйста, прочтите документацию. Вы можете повторно использовать свойства из аннотаций в качестве настройки толстой банки. - person Marcin Grzejszczak; 16.01.2020
comment
Все утро читаю документацию. Я еще не нашел недвижимость, которая делает то, что я хочу. stubrunner.repositoryRoot неприменимо, потому что у меня нет удаленного репозитория Maven. Я не могу установить stubrunner.stubsMode в LOCAL, потому что я использую Gradle, а не Maven, и поэтому у меня нет локального репозитория Maven. Я ищу что-то вроде stubrunner.stubsJar=/usr/src/stubs.jar. - person lxdr; 16.01.2020
comment
Я привел вам пример работающей тестовой аннотации. Эта аннотация точно соответствует свойствам, которые вам нужно установить. Вам необходимо указать корень репозитория в документации, которую мы описываем, включая вышеупомянутый пример. У вас есть локальный или удаленный кейс с файлами. Кстати, при использовании gradle у вас может быть локальное репозиторий maven. Где вы читали, что при использовании maven вы должны использовать local? - person Marcin Grzejszczak; 16.01.2020
comment
stubrunner.repositoryRoot неприменим, потому что у меня нет удаленного репозитория Maven - stubrunner.repositoryRoot не всегда относится к maven, но также и к локальной файловой системе, например @AutoConfigureStubRunner(stubsMode = StubRunnerProperties.StubsMode.REMOTE, repositoryRoot = "stubs://file://location/to/the/producer/target/stubs/", ids = "com.example:some-producer") из документов - person adrhc; 21.05.2021