Плагин Spring Contract Maven pushStubsToScm не работает - PullRequest
0 голосов
/ 01 июля 2018

Я пытался использовать Spring Contract Maven Plugin на стороне продюсера , чтобы загрузить банку с заглушками и поделиться ею с потребителями.

Я использую Spring Cloud Contract 2.0.0.

Я настроил spring-cloud-contract-maven-plugin в моем проекте, коды загружены в Github .

<plugin>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-contract-maven-plugin</artifactId>
    <version>${spring-cloud-contract.version}</version>
    <extensions>true</extensions>
    <configuration>
        <basePackageForTests>com.example.demo</basePackageForTests>
        <baseClassMappings>
            <baseClassMapping>
                <contractPackageRegex>.*rest.*</contractPackageRegex>
                <baseClassFQN>com.example.demo.RestVerifierBase</baseClassFQN>
            </baseClassMapping>
        </baseClassMappings>
        <!-- We want to pick contracts from a Git repository -->
        <!--<contractsRepositoryUrl>git://file://${project.basedir}/target/contract_git/</contractsRepositoryUrl>-->
        <!-- Example of URL via git protocol -->
        <!--<contractsRepositoryUrl>git://git@github.com:spring-cloud-samples/spring-cloud-contract-samples.git</contractsRepositoryUrl>-->
        <!-- Example of URL via http protocol -->
        <!--<contractsRepositoryUrl>git://https://github.com/spring-cloud-samples/spring-cloud-contract-samples.git</contractsRepositoryUrl>-->

        <contractsRepositoryUrl>git://https://github.com/hantsy/contracts-git.git</contractsRepositoryUrl>
        <!-- We reuse the contract dependency section to set up the path
        to the folder that contains the contract definitions. In our case the
        path will be /groupId/artifactId/version/contracts -->
        <contractDependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>${project.artifactId}</artifactId>
            <version>${project.version}</version>
        </contractDependency>
        <!-- The mode can't be classpath -->
        <contractsMode>REMOTE</contractsMode>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <!-- By default we will not push the stubs back to SCM,
                you have to explicitly add it as a goal -->
                <goal>pushStubsToScm</goal>
            </goals>
        </execution>
    </executions>
</plugin> 

Когда я запустил команду mvn clean install -DskipTests -DcontractsRepositoryUsername=hantsy -DcontractsRepositoryPassword=mypassword и получил ошибку.

Caused by: org.eclipse.jgit.errors.TransportException: https://github.com/hantsy/contracts-git.git: Authentication is required but no CredentialsProvider has been registered

Обновление : если я установлю contractsMode на LOCAL, произойдет сбой с ошибкой загрузки заглушки, возможно, аналогично этой проблеме , в новой версии 2.0.0, Spring Облачные контракты не могут разрешать jars из локальных репозиториев maven, как и ожидалось, когда stubsMode установлен в LOCAL.

Обновление 2 : Я также пытался добавить contractRepositoryUsername и contractRepositoryPassword в конфигурации плагина весеннего контракта maven, он не работает.

1 Ответ

0 голосов
/ 02 июля 2018

contractsMode должно быть REMOTE. Я взял ваш пример, и он хорошо работает с:

<contractsRepositoryUrl>git://git@github.com:marcingrzejszczak/contracts-git.git</contractsRepositoryUrl>
<contractsMode>REMOTE</contractsMode>

с передачей учетных данных вручную, я вижу абсолютно странное ...

Я вижу [INFO] Passed username and password - will set a custom credentials provider, что означает, что имя пользователя и пароль были переданы, и я их использую. Но на самом деле я получаю Authentication is required but no CredentialsProvider has been registered, что не имеет смысла. Можете ли вы подать еще одну ошибку для этого? Обходной путь должен использовать агент.

ОБНОВЛЕНИЕ:

Проблема здесь исправлена ​​https://github.com/spring-cloud/spring-cloud-contract/issues/678

...